Невозможно пройти тесты, в окне с вопросами пусто |
Опубликован: 14.08.2012 | Доступ: свободный | Студентов: 881 / 20 | Оценка: 5.00 / 5.00 | Длительность: 09:59:00
Специальности: Программист
Теги:
Самостоятельная работа 8:
Взаимодействие объектов
В листинге 14.3 вы можете видеть код игрового компонента, используемого в данном примере.
using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace P8_1 { /// <summary> /// Это игровой компонент, реализующий интерфейс IUpdateable. /// </summary> public class spriteComp : Microsoft.Xna.Framework.DrawableGameComponent { //Изображение private Texture2D sprTexture; //Прямоугольник, ограничивающий спрайт private Rectangle sprRectangle; //Координата спрайта private Vector2 sprPosition; //Границы экрана private Rectangle scrBounds; //Направление движения спрайта private Vector2 sprMove = new Vector2(0, 0); public spriteComp(Game game, ref Texture2D newTexture, Rectangle newRectangle, Vector2 newPosition ) : base(game) { sprTexture = newTexture; sprRectangle = newRectangle; sprPosition = newPosition; //Работаем в портретном режиме, высота - 480, ширина - 800 scrBounds = new Rectangle(0, 0, game.Window.ClientBounds.Height, game.Window.ClientBounds.Width ); } /// <summary> /// Позволяет игровому компоненту выполнить необходимую инициализацию перед\r\запуском. Здесь можно запросить нужные службы и загрузить контент. /// /// </summary> public override void Initialize() { // ЗАДАЧА: добавьте здесь код инициализации base.Initialize(); } /// <summary> /// Позволяет игровому компоненту обновиться. /// </summary> /// <param name="gameTime">Предоставляет моментальный снимок значений времени.</param> public override void Update(GameTime gameTime) { //Изменение координат в соответствии с данными, имеющимися в sprMove sprPosition.Y = sprPosition.Y + sprMove.Y; sprPosition.X = sprPosition.X + sprMove.X; //Если вышли за пределы экрана - исправляем if (sprPosition.X < scrBounds.Left) { sprPosition.X = scrBounds.Left; } if (sprPosition.X > scrBounds.Width - sprRectangle.Width) { sprPosition.X = scrBounds.Width - sprRectangle.Width; } if (sprPosition.Y < scrBounds.Top) { sprPosition.Y = scrBounds.Top; } if (sprPosition.Y > scrBounds.Height - sprRectangle.Height) { sprPosition.Y = scrBounds.Height - sprRectangle.Height; } base.Update(gameTime); } public override void Draw(GameTime gameTime) { SpriteBatch sprBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch)); sprBatch.Draw(sprTexture, sprPosition, sprRectangle, Color.White); base.Draw(gameTime); } //Метод для установки направления движения спрайта public void Move(Vector2 move) { sprMove = move; } //Для получения позиции спрайта public Vector2 sprPos() { return sprPosition; } //Для установки позиции спрайта public void setSprPos(Vector2 sPos) { sprPosition=sPos; } //Для получения прямоугольника, ограничивающего спрайт public Rectangle sprRect() { return sprRectangle; } } }Листинг 14.3. Код игрового компонента spriteComp
Это практически точно такой же код компонента, которым мы пользовались ранее. Единственная особенность – несколько методов для работы с позицией спрайта.
На рис. 14.4 вы можете видеть игровой экран проекта в эмуляторе. Для большей наглядности мы заменили прозрачный фон, на котором ранее в похожем проекте выводились элементы управления, на белый.