Предыдущая Следующая
Во второй строке кода метода DrawAnimationSprite() создается прямоугольник или видимая прямоугольная область, которая по своему размеру равна ширине и высоте одного фрейма анимационной последовательности. То есть создается механизм отсечения всех фреймов анимационной последовательности, кроме одного-единственного фрейма, который рисуется в текущий момент на экране монитора. Если не создавать такой механизм, то на экране будет нарисована вся анимационная последовательность разом, состоящая из 12 фреймов. Фактически в коде создается этакая дыра в стене заданного размера, за которой мы подставляем необходимые рисунки, чередуя их с заданной скоростью, что в итоге и создает эффект анимации.
В последней строке кода метода DrawAnimationSprite() происходит прорисовка одного из фреймов на экране монитора:
spriteBatch.Draw(spriteTexture, spritePosition, rectangle, Color.White);
Где параметры:
□ spriteTexture - это загруженное в игру изображение;
□ spritePosition - позиция на экране монитора;
□ rectangle - ограничивающий или отсекающий прямоугольник, равный ширине и высоте одного фрейма;
□ Color.White - задает цвет для рисуемого изображения.
Полный исходный код класса Sprite проекта Animation представлен в листинге 7.1.
//=========================================================================
/// <summary>
98 Спрайтовая анимация
Проект Animation 99
/// Листинг 7.1
/// Исходный код к книге:
/// "Программирование компьютерных игр под Windows в XNA Game Studio Express" /// Автор книги: Горнаков С. Г.
/// Глава 7
/// Проект: Animation /// Класс: Sprite /// Создаем анимацию /// <summary>
//=========================================================================
#region Using Statements using System;
using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics;
#endregion
namespace Animation
{
public class Sprite
{
public Texture2D spriteTexture; public Vector2 spritePosition; private int frameCount; private double timeFrame; private int frame; private double totalElapsed;
/// <summary> /// Конструктор /// <summary> public Sprite()
{ }
/// <summary>
/// Конструктор для анимированного спрайта /// <summary>
public Sprite(int frameCount, int framesPerSec) {
frameCount = frameCount;
timeFrame = (float)1 / framesPerSec;
frame = 0;
totalElapsed = 0; Предыдущая Следующая
|