Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

Второй параметр framesPerSec конструктора класса Sprite в момент создания объекта этого класса получает количество кадров, которые необходимо показать за одну секунду. Иначе говоря, в этом параметре задается определенное количество кадров, показываемых на экране за одну секунду. Это значение позволяет рассчитать время задержки, необходимое для показа одного фрейма на экране. Параметр framesPerSec в какой-то мере позволяет задавать скорость перемещения по фреймам или задает скорость перебора фреймов анимационной последовательности изображения. Этот механизм дает возможность реализовы-вать различную степень скорости анимации объектов.

Такой подход в реализации анимированного конструктора позволяет создавать множество различных объектов класса Sprite, каждый из которых волен содержать любое количество фреймов анимационной последовательности, а также определять количество фреймов изображения, показываемых за одну секунду.

Далее в исходном коде класса Sprite добавляется новый метод UpdateFrame(), реализующий механику перебора фреймов изображения на основании полученного системного времени и его сравнения со временем задержки, отведенным на показ одного фрейма.

public void UpdateFrame(double elapsed) {

totalElapsed += elapsed;

if (totalElapsed > timeFrame)

{

frame++;

frame = frame % (frameCount - 1); totalElapsed -= timeFrame;

}

}

В метод UpdateFrame() передается значение времени, полученное с момента предыдущего вызова этого метода, и его увеличение на единицу (получение и передача времени реализуются в классе Gamel). Затем в конструкции кода if/else проверяется условие, в котором время задержки для показа одного фрейма (переменная timeFrame) не должно быть больше полученного значения времени. Как только это время больше или время задержки для показа одного фрейма истекает, то происходит увеличение счетчика фреймов на единицу и соответственно переход к показу следующего фрейма.

И в конце исходного кода класса Sprite добавляется новый метод DrawAnimationSprite() , предназначенный для рисования анимированных спрайтов, созданных посредством анимированного конструктора класса Sprite.

public void DrawAnimationSprite(SpriteBatch spriteBatch) {

int frameWidth = spriteTexture.Width / frameCount;

Rectangle rectangle = new Rectangle(frameWidth * frame, 0, frameWidth, spriteTexture.Height);

spriteBatch.Draw(spriteTexture, spritePosition, rectangle, Color.White);

}

В первой строке кода этого метода переменная frameWidth инициализируется значением ширины одного фрейма анимационной последовательности, измеряемой в пикселях. Строка spriteTexture.Width позволяет получить текущую ширину графического изображения (длину всех 12 фреймов изображения sprite.png), и далее происходит деление этого значения на общее количество фреймов анимационной последовательности (например: 200 пикселей / 5 фреймов = 40 пикселей), что в итоге дает нам искомую ширину одного фрейма. Вот поэтому все фреймы анимационной последовательности и должны быть одинаковыми! Дополнительно в этом исходном коде можно использовать и числовые значения для каждого конкретного изображения, но тогда для каждого загружаемого в игру спрайта вам придется писать отдельный метод DrawAnimationSprite().


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz