Пятница, 29 Марта 2024, 05:30

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как вы увлеклись геймкриэйтингом?
Всего ответов: 9774
Главная » Статьи » Создание игр

Теория анимации...
Теория анимации.

Добрый день, вечер, ночь, утро... В общем, добрые сутки, дорогие игроделы. Сегодня мы займёмся очень интересным занятием – рассмотрим платформу для анимационного воспроизведения, или просто – анимацию. Я вам поведаю, из чего состоит красивая, движущаяся картинка и как её проиграть. И так, начнём...

У нас нет киноплёнки! Или из чего состоит анимация.
Анимация, как и киноплёнка, состоит из кадров (frame). Эти кадры располагаются в памяти компьютера и определяются по идентификационным номерам (ID). Каждый кадр имеет последовательный номер (см-те Рис. 1.).


Рис. 1. Расположение кадров в памяти.

Что бы получить движение в кино, киноплёнка прокручивается со скоростью 24 кадр/секунда. В анимации движение происходит немного по-другому: кадры заменяются с определённым интервалом (interval). Интервал измеряется в миллисекундах (1000 мс. = 1 сек.). Замена кадра происходит по возрастанию ID. Если ID кадра = 0, то следующий 1 кадр; если ID кадра = 1, то следующий 2 кадр; и так далее. С таким же успехом можно создать движение в обратную сторону, уменьшая порядковый номер.
На рисунке сбоку приведена GIF анимация, которая демонстрирует принцип замены кадров, увеличивая порядковый номер на один с интервалом в 200 мс.

Теория кода.
Я не буду приводить конкретный код программы, а рассмотрю его в виде псевдокода, либо расскажу. И первое, что попадает мне под «микроскоп» – это система загрузки изображения. В примере, который приложен к статье, рассматривается динамичная система загрузки. Суть её заключается в том, что бы создавать объекты в памяти, а указатели хранить в некотором массиве. В примере, в качестве массива, я использую обычный STL класс vector. Так же, для упрощения, можно использовать фиксированный массив картинок. Но это уже зависит от фантазии, нужды и способностей программиста.
В самом начале создаётся по средствам оператора new объект TBitmap. Так же, с таким же успехом, можно создать объект BitMap, используя WinApi. Но это не главное. В результате создания объекта, оператор new возвращает адрес памяти, где расположился объект. Этот адрес есть тридцатидвухразрядное число. Используя метод приведения типа (cast), превращаем указатель в число. А получившееся число можно запихнуть в вектор. Для получения указателя проводим действия в обратном порядке.
Хочу сделать одно замечание: в конце функции, где загружаются объекты в память, не надо вписывать оператор удаления объекта с созданным объектом. Минимум к чему приведёт эта ошибка – к вылету программы.

И так, мы загрузили картинки, и теперь пришло время проиграть анимацию. Я в этой статье, и в примере, привожу упрощённый алгоритм управления воспроизведением. Головное управление производится увеличением некоего счётчика на единицу, пока значение счётчика не сравняется со значением интервала. В случае если интервал и счётчик сравнялись, счётчик устанавливается в нуль, а значение порядкового номера кадра, либо увеличивается, либо уменьшается на один. Когда порядковый номер кадра доходит до последнего кадра, либо до нуля, то он устанавливается в нуль, или в номер последнего кадра соответственно. Это всё, на псевдокоде, будет выглядеть так:

Если счётчик == интервалу, то:
Счётчику присваивается нуль.
Если реверс == истине, то:
Уменьшить ПосКадр на один;
Если ПосКадр меньше нуля, то:
ПосКадру присваивается ID_Последнего_кадра.
В противном случае:
Увеличить ПосКадр на один;
Если ПосКадр больше ID_Последнего_кадра, то:
ПосКадру присваивается нуль.
В противном случае:
Увеличить счётчик на один.

В заключение.
Я упомянул выше, что к статье приложен работоспособный пример. В заключении я его немного опишу. Пример платформы анимации написан на C++ Builder 6. В архиве примера представлен исходный код, 5 картинок в формате BMP, и бинарный, независимый от C++ Builder код (приложение).

Скриншот:
Надеюсь, что эта статья кому ни будь, поможет. С уважением BOOM...
Скачать пример...

Категория: Создание игр | Добавил: BOOM (23 Октября 2010)
Просмотров: 13024 | Рейтинг: 5.0/8 |
Теги: Кадры анимации, анимация, frame, Кадры, Урок, C++ Builder, графика, Теория анимации, мультипликация, gif
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Теория анимации...», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Ultra Engine
  • Ludiloom
  • Construct 3
  • Inform
  • Nuclear Basic
  • Raycasting Game Maker
  • Visionaire Studio
  • lifeEngine
  • Moai
  • Catcake
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг