пользователей: 21204
предметов: 10449
вопросов: 177330
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Программирование в интернет:
» ПИ
» ОКГТМ
» КИНФС

Створення 2D ефектів DirectDraw

Рассмотрим создание 2-D эффектов на примере фейерверка, который разбрасывает искры из центра экрана. Каждая искра фейерверка должен жить своей жизнью на основе случайных чисел.

Для описания искр понадобится структура следующего вида:

  • struct PARTICLEWORD х, у; // Координаты искры
  • double angle; // Угол движения
  • int adjust; // Изменение угла движения
  • int speed; // Скорость движения
  • BYTE r, g, b; // Цвет
  • int life; // Время жизни искры к затуханию Particle_ent;

Для реализации примера понадобятся две переменные: переменная определяющий количество искр, которые генерируют фейерверк и переменная с массивом искр. Отображение фейерверка будет происходить в основном цикле сообщений, в котором должна вызываться функция рисования сцены. Но к началу цикла нужно еще проинициализировать искры начальными значениями.

Рисование фейерверка происходит через прямой доступ к поверхности. Поскольку придется выводить на экран достаточно много точек, то блокируем поверхность в самом начале, чтобы не делать это на каждом этапе цикла. Так, в этом случае поверхность будет заблокирована достаточно долго, но скорость работы цикла рисования повышается за счет одного блокировки. После блокировки начинается цикл. Сначала увеличиваем угол движения искры на значение adjust. В зависимости от нового угла и скорости движения искры (параметр speed) рассчитываем новое положение. Теперь нужно узнать - вышла точка за пределы экрана. Если так, то выполняем инициализацию точки заново. Если не сделать этого, то точка окажется не там, где очикувалиеться. Дело в том, что при выводе графики через прямой доступ ни о какой автоматическую проверку границ экрана не может быть и речи. Теперь корректируем цвет точки. Он, как и угол движения, корректируется на значение adjust. Теперь все готово, и можно отображать точку на поверхности.


17.01.2016; 23:27
хиты: 15
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь