Предыдущая Следующая
Во второй строке кода метода DrawAnimationSprite() создается прямоугольник или видимая прямоугольная область, которая по своему размеру равна ширине и высоте одного фрейма анимационной последовательности. То есть создается механизм отсечения всех фреймов анимационной последовательности, кроме одного-единственного фрейма, который рисуется в текущий момент на экране. Если не создавать такого механизма, то на экране будет нарисована вся анимационная последовательность разом, состоящая из 12 фреймов. Фактически в коде создается этакая дыра в стене заданного размера, за которой мы подставляем необходимые фреймы рисунка, чередуя их с заданной скоростью, что в итоге и создает эффект анимации.
В последней строке кода метода DrawAnimationSprite() происходит прорисовка одного из фреймов на экране телевизора:
spriteBatch.Draw(spriteTexture, spritePosition, rectangle, Color.White);
где параметры:
□ spriteTexture - это загруженное в игру изображение;
□ spritePosition - позиция на экране телевизора;
□ rectangle - ограничивающий или отсекающий прямоугольник, равный ширине и высоте одного фрейма;
□ Color.White - задает цвет для рисуемого изображения.
Полный исходный код класса Sprite проекта Animation представлен в листинге 7.1.
//=========================================================================
/// <summary> /// Листинг 7.l
Проект Animation 143
/// Исходный код к книге:
/// «Программирование игр для приставки Xbox 360 в XNA Game Studio Express»
/// Автор книги: Горнаков C. Г.
/// Глава 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;
}
/// <summary> Предыдущая Следующая
|