|
Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
Опубликован: 10.04.2009 | Доступ: свободный | Студентов: 3253 / 244 | Оценка: 4.49 / 4.39 | Длительность: 17:21:00
Темы: Компьютерная графика, Программирование, Игры
Специальности: Программист
Самостоятельная работа 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.
Трансформации спрайта