Для этого урока возьмем программу из предыдущего (так будет во всех уроках -
в каждом следующем мы просто улучшаем программу предыдущего), единственные
изменения - я возьму спрайты покрасивее:
Это фон(он нарисован в 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;
|
|