Далее: кликая на форму в свободное место и Object Inspector в закладке Events находим OnCreate. Создаём процедуру и пишем в ней:
with TBOSS.Create(Dxspriteengine1.Engine) do
begin
PixelCheck := True; // для столкновения прощитывает каждую точку
Image := form1.dxImageList1.Items.Find('BOSS'); // ищем спрайт в ImageList`е
x:=350; // x координаты
y:=10; // y координаты
Width := Image.Width; //ширина равна ширине спрайта
Height := Image.Height; //высота равна высоте спрайта
end;
with TPlayerSprite.Create(Dxspriteengine1.Engine) do
begin
PixelCheck := True;
Image := form1.dxImageList1.Items.Find('Pla');
x:=350;
y:=500;
Width := Image.Width;
Height := Image.Height;
end;
При создании формы мы создаём все
статические объекты сразу. Ну что теперь можно перейти к процедурам, и их заполнению :).
Начнём с процедур босса. Они самые простые.
Пред implementation в var добавить переменную i:boolean; //переменная движения в сторону BOSA
и в свойствах формы OnCreate добавить: I:=true;
Только после этого пишем следующие:
Procedure TBoSS.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if x>= 700 then I:= true; // когда X>= то туда >>>
if x<= 0 then I:= false; // когда X<= то туда <<<
if i= true then X := X+10;
if i= false then X := X-10;
Collision;
end;
constructor TBOSS.Create(AParent: TSprite); //Сдесь всё понятно
begin
inherited Create(AParent);
Image := form1.DXImageList1.Items.Find('BOSS');
Width := Image.Width;
Height := Image.Height;
end;
destructor TBOSS.Destroy; //тут тоже
begin
inherited Destroy;
end;
procedure TBoss.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Tplayerfa then dead; // если спрайт сталкивается с Tplayerfa то умирает
Collision; // Включаем столкновение
end;
ФУ!! Ну вроде с одним объектом разобрались переходим к игроку тут одна процедура
Procedure TPlayerSprite.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if isLeft in Form1.DXInput1.States then x:=x-5; // при нажатии двигаем объект в лево
if isRight in Form1.DXInput1.States then X:=x+5; // при нажатии двигаем объект вправо
if isup in Form1.DXInput1.States then // при нажатие вверх создаётся наша пулька
begin
with TPlayerFa.Create(Engine) do
begin
PixelCheck := True;
Image := form1.dxImageList1.Items.Find('Pula');
X := Self.X+Self.Width -40; //Чтобы пуля создавалась около нашего обьекта
Y := Self.Y+Self.Height -80 ; //Чтобы пуля создавалась около нашего обьекта
Width := Image.Width;
Height := Image.Height;
end;
end;
if y >= form1.DXDraw1.SurfaceHeight-image.Height then //непускаем
y := form1.DXDraw1.SurfaceHeight-image.Height; //объект
if x >= form1.DXDraw1.SurfaceWidth -image.Width then //за границы
x := form1.DXDraw1.SurfaceWidth -image.Width; // формы
if y <= 0 then
y := 1;
if x <= 0 then
x:=1;
end;
И наконец последнее это сама пуля и её процедуры:
Procedure TPlayerFa.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
y:=y-3; //проще некуда неправда ли
end;
procedure TPlayerFa.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TBoss then dead;
Collision;
end;
И на последок для удобства в Object Inspector в закладке Events находим OnKeyDown кликаем и пишем:
if Key=VK_ESCAPE then application.Terminate;
При вставки этого кода по нажатию клавиши ESC выходим из приложения.
Вот и всё это одно из самых примитивных игр на DelphiX но ты её сделал.
Вот вам Д/З для улучшения знаний:
- Сделайте так, чтобы при уходе патрона из зоны видимости он уничтожался
- Сделайте чтобы патроны стреляли очередями,
а не кучами как у меня
Ну и всё, если вы сможете реализовать данные вещи, считайте что вы усвоили урок.
Ну а если вы не справитесь с данными задачами, я объясню их решение в следующей части.