|
Палестинский филиал 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 на форме надо будет растянуть на весь экран.
P.P.S. У кого что-то не получилось, могут скачать готовую программу
Кому сильно охота хотя бы немного посмотреть настоящие
возможности ДельфИкса, те могут скачать игру, полностью написанную
на ДельфИксе, причем написанную не кем-то особо крутым, а автором
сайта http://instrumentari.narod.ru/ (игра
на двоих). а здесь лежат исходники (только для Delphi 6.0) |