Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
Опубликован: 10.04.2009 | Уровень: специалист | Доступ: платный
Самостоятельная работа 6:
Спрайтовая анимация
Аннотация: В этой лабораторной работе мы познакомимся со способами спрайтовой анимации, применимыми в XNA 2.0.
Ключевые слова: операции, ПО, спрайт, переменная, параметр, кадр, класс, объект, Sprite, вариант использования
Задачи работы
- Освоить создание и использование спрайтов для покадровой анимации
- Освоить трансформацию спрайтов
- Освоить повороты спрайтов
- Освоить изменение размеров спрайтов
- Научиться создавать фон с эффектом скроллинга
- Создать шаблон игры "Автомобильный симулятор"
Трансформация спрайтов
XNA поддерживает различные операции по трансформации спрайтов при их выводе на экран. Создадим новый игровой проект P6_1 на основе игрового проекта P3_1. Напомню, что в P3_1 мы рассматривали простой пример перемещения спрайта по экрану в соответствии с клавиатурными командами. Метод Draw() объекта класса SpriteBatch имеет 7 перегруженных вариантов. До этого мы пользовались простыми вариантами метода – теперь используем более сложный вариант, который предусматривает использование некоторых дополнительных параметров при выводе спрайта на экран. В листинге 10.1. вы можете видеть код объекта Game1, реализующий различные операции по трансформации спрайта.
using System; using System.Collections.Generic; 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.Net; using Microsoft.Xna.Framework.Storage; namespace P6_1 { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; //Текстура private Texture2D MySprite; //Исходная позиция спрайта private Vector2 position = new Vector2(150, 200); //Угол поворота спрайта (в радианах) private float rotation = 0; //Исходный оттенок спрайта private Color color = new Color(255, 255, 255); //Генератор случайных чисел для задания нового цвета private Random rand = new Random(); //Размер спрайта private Vector2 scale = new Vector2(1, 1); //Начало координат спрайта private Vector2 origin; //Прямоугольник, ограничивающий спрайт private Rectangle spRec = new Rectangle(0, 0, 17, 17); public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); MySprite = Content.Load<Texture2D>("ball"); // TODO: use this.Content to load your game content here } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); KeyboardState kbState = Keyboard.GetState(); if (kbState.IsKeyDown(Keys.Up)) position.Y -= 1; if (kbState.IsKeyDown(Keys.Down)) position.Y += 1; if (kbState.IsKeyDown(Keys.Left)) { position.X -= 1; rotation -= 0.1f; } if (kbState.IsKeyDown(Keys.Right)) { position.X += 1; rotation += 0.1f; } if (kbState .IsKeyDown (Keys .A)) { color = new Color ((byte)rand .Next(0,255), (byte)rand .Next (0,255), (byte)rand .Next (0,255)); } if (kbState .IsKeyDown (Keys .S )) { scale += new Vector2((float)0.2, (float)0.2); } if (kbState.IsKeyDown(Keys.W)) { scale -= new Vector2((float)0.2, (float)0.2); } origin = (new Vector2 (spRec.Width ,spRec.Height ))/2; } protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(MySprite, position, spRec, color, rotation , origin , scale , SpriteEffects.None, (float)0); spriteBatch.End(); // TODO: Add your drawing code here base.Draw(gameTime); } } }Листинг 10.1. Трансформации спрайта