скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Проигрывание звука, передвижение картинок и проверка их столкновения в 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






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook