"Как много игр то хороших,
Да только сегодня не до них"
Автор.

 

Здравствуйте! Сегодня мы создадим первую, и надеюсь не последнюю игрушку, смысл у нас будет такой: Мы маленький космический корабль нам надо уничтожить большой статичный космический корабль. (прим.автора: "Этот пример научит мыслить по DelphiX`ски").

Ну что приступим, запускаем Delphi, кидаем на форму следующие компоненты:

DXDraw- и проставляем в нем следующие опции в Object Inspector:
Align = alClient - это нужно для того чтобы DXDraw "обтянул" всю форму.
Display = 800x600x16 - почему спросите вы не 800x600x24 да потому что, не все видеокарты поддерживают 24 битный режим.
Options-doFullScreen = True если хочешь чтобы твоя игра была на весь экран и ещё надо в свойствах формы поставить: BorderStyle = bsnone.

TDXSpriteEngine - Сам движок для работы со спрайтами. В нём нужно только выбрать в поле DXDraw сам DXDraw1.

TDXTimer - Он вообще то и, нужен чтобы обновлять кадры, но он нам пригодится и для другого. Свойства следующие:
Active Only = False - По русски: "Быть активным всегда". Смысл: Работает даже если вы, работаете с другим приложением. 
Interval = 0 - Частота повторения цикла должно быть равна 0.
TDXImageList - В этом листе будут у нас, хранится все спрайты. Свойства:
DXDraw = DXDraw1

После кликаем на Items… (TPictureCollection) появляется окно Editing DxImagelist1.Items .
В нём кликаем по Add New и в Object Inspector в поле "Name" пишем название спрайта.
Назовем его "pla" - это будет сам игрок, загружаем его с помощью Picture… 

Игрок у меня будет вот такой:

Только фон чёрный для прозрачности. Устанавливаю в Object Inspector у данной картинки свойства Transparent = true и TransparentColor = clBlack. 

Создаём ещё один спрайт под именем Pula проделываем тоже самое с ним только TransparentColor = clWhite . Выглядит пуля вот так: 

И последнее что нам осталось добавить это боса, называем его "BOSS", вот он: 

TransparentColor = clWhite на этом с DXImageList мы пока закончили.

TDXInput - Ну а этот компонент будет отвечать за нажатые клавиши на клавиатуре. В нем никакие изменения делать не будем.

Ну что теперь приступаем к написанию кода. 
Вначале нужно изменить класс формы на TDXForm вот пример:
До:

……..
type
TForm1 = class(TForm)
DXDraw1: TDXDraw;
DXImageList1: TDXImageList;
DXInput1: TDXInput;
……

После:

……
type
TForm1 = class(TDXForm)
DXDraw1: TDXDraw;
DXImageList1: TDXImageList;
DXInput1: TDXInput
…….

Дальше расписываем классы после implementation. Вот так:
implementation

{$R *.DFM}

type
TPlayerSprite = class(TImageSprite) //Класс игрока
protected
procedure DoMove(MoveCount: Integer); override; // Движение
end;

TBoSS = class(TImageSprite) // Класс боса
Protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override; // Столкновение 
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override; //при создании
destructor Destroy; override; // при смерти
end;

TPlayerFa = class(TImageSprite) 
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override; 
public
constructor Create(AParent: TSprite); override;
destructor Destroy; override;
end;

Далее расписываем каждую процедуру для каждого класса.
Вот образец:

Procedure TPlayerFa.DoMove(MoveCount: Integer);
Begin
inherited DoMove(MoveCount);
end;

constructor TPlayerFa.Create(AParent: TSprite);
begin
end;

destructor TPlayerFa.Destroy;
begin
inherited Destroy; // Обязательно 

end;

procedure TPlayerFa.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
end;

Это нужно проделать с каждым классом содержащие свои процедуры указанные в классе.
Далее выбираем компонент DXTimer который уже на форме и в Object Inspector в закладке Events, находим пункт OnTimer. Два раза кликаем по пункту создаётся процедура
DXTimer1Timer в ней пишем следующие строчки:

if not DXDraw1.CanDraw then exit; // Если нет DirectX выходим
DXInput1.Update;
DXSpriteEngine1.Move(LagCount);
DXSpriteEngine1.Dead;
DXDraw1.Surface.Fill(0);
DXSpriteEngine1.Draw;
DXDraw1.Flip;

(продолжение следует)

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии