Проигрывание звука, передвижение картинок и проверка их столкновения в DelphiX
|
Палестинский филиал WESTWOOD впервые в мире реализовал первый уровень игры "RED ALERT 2" (взятие Пентагона) в полном 3D и максимальным уровнем реализма... Сообщается о незначительных (около 50 000) жертвах среди бета-тестеров...
|
Для этого урока возьмем программу из предыдущего (так будет во всех уроках - в каждом следующем мы просто улучшаем программу предыдущего), единственные изменения - я возьму спрайты покрасивее:
Это фон(он нарисован в Fireworks):
А это тарелка(нарисована там же):
Итак, приступим к работе
Цель этого занятия - научится проигрывать звук, передвигать картинки и проверять их столкновения. Для проверки столкновений понадобится третий спрайт, я нарисую стенку.
Теперь я уже не буду объяснять, как вывести стенку на экран. Я выведу её с координатами "400,400.0"
Все, можно пристурать к анимированию. В описание класса Ttarelka, перед "Public" надо поставить такую строку:
procedure DoMove(MoveCount: Integer); override;
|
Теперь описание класса должно выглядеть так:
Ttarelka = class(TImageSprite)
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
end;
|
Теперь эту процедуру надо ПРОписать. Сразу после трех конструкторов пишем:
procedure Ttarelka.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
Collision;
X:=X+1;
Y:=Y+1;
end;
|
Разбираем: изменяться тут будут только большие "X" и "Y" - координаты спрайтов, "+1" - коэффициент изменения, берется от фонаря (или так, как задумал).
Запускаем и видим тарелку, летящую по диагонали, налетающую на стенку и летящую дальше!
Теперь думаем: зачем тут стенка? Обычно через стенки не летают, о них разбиваются. Начинаем писать проверку столкновений. Там же, где описывали doMove(перед "Public") пишем:
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
|
Теперь описание класса "Ttarelka" должно быть таким:
Ttarelka = class(TImageSprite)
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
end;
|
Теперь ПРОписываем, после прописывания процедуры doMove:
procedure Ttarelka.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Twall then
dead;
end;
|
Запускаем и видим, как тарелка наскакивает на стену и разбивается!
Только скучно как-то! Полетела, разбилась и все! Сделаем так, чтобы спрайт тарелки создавался по щелчку мыши (и заодно увидим, что процедура, написанная для одного спрайта действует и для всех его копий). В "Событиях"(Events) объекта DXDraw создаем обработчик onClick и пишем туда:
Ttarelka.create(SpriteEngine.Engine);
|
Заодно убираем эту процедуру из onFormCreate.
Ну все бы хорошо, ещё бы было этакое "БУМ!" когда тарелка разбивается!
Ставим на форму DXWaveList и DXSound. В свойства "DXSound" вэйв-листа выбираем "DXSound1" и переименовываем сам DXWaveList1 в DXWaveList. В Items'ax создаем новый, называем его "boom" и ставим в свойстве "wave" звук. Теперь в процедуру "doCollision" добавляем:
Form1.DXWaveList.Items.Find('boom').Play(False);
|
Теперь процедура doCollision выгдядит так:
procedure Ttarelka.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Twall then
begin
Form1.DXWaveList.Items.Find('boom').Play(false);
dead;
end;
end;
|
Наслаждемся тем, что второй урок наконец закончен!
P.S. DXDraw на форме надо будет растянуть на весь экран.
Кому сильно охота хотя бы немного посмотреть настоящие возможности ДельфИкса, те могут скачать игру, полностью написанную на ДельфИксе, причем написанную не кем-то особо крутым, а автором сайта http://instrumentari.narod.ru
|