Форум: "Игры";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Внизопять DoCollision Найти похожие ветки
← →
Dmitrich (2003-12-22 04:49) [0]Здраствуйте уважаемые мастера Delphi. У меня такая проблемка: патрон при попадании в Tenemy не вызывает DoCollision может я что-то не так написал?
Зарание спасибо.
Простой пример:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DXSprite, DXClass, DXInput, DXDraws;
type
TForm1 = class(TForm)
...
end;
var
Form1: TForm1;
Dev,enemy:TImagesprite;
Dev_life,Enemy_life:integer;
implementation
{$R *.dfm}
type
Tdev=class(TImageSprite)
protected
procedure DoMove(MoveCount: Integer); override;
end;{tdev}
Tenemy=class(TImageSprite)
protected
procedure DoMove(MoveCount: Integer); override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
Tp=class(TImageSprite)
procedure DoMove(MoveCount: Integer); override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
procedure Tp.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TEnemy then
begin
Enemy_life:=Enemy_life-10;
dead;
end;
end;
Procedure Tp.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
y:=y-5;
end;
Procedure Tenemy.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
end;
procedure Tenemy.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
end;
procedure Tdev.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
If isleft in Form1.DXInput1.States then x:=x-1;
If isright in Form1.DXInput1.States then x:=x+1;
If isbutton1 in Form1.DXInput1.States then
{создание патрона}
with Tp.Create(Form1.DXSpriteEngine1.Engine) do begin
PixelCheck := True;
Image := Form1.DXImageList1.Items.Find("p");
Collisioned:=true;
Z := 0;
Width := Image.Width;
Height := Image.Height;
x:=Tdev(dev).X;
y:=Tdev(dev).Y;;
end;
end;
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw1.CanDraw then exit;
DXInput1.Update;
DXSpriteEngine1.Move(lagcount);
DXSpriteEngine1.Dead;
DXDraw1.Surface.Fill(0);
DXSpriteEngine1.draw;
with DXDraw1.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 12;
Textout(10, 10, "Enemy life: "+inttostr(Enemy_life));
Release;
end;
DXDraw1.Flip;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Dev := TDev.Create(DXSpriteEngine1.Engine);
Dev_Life:=100;
with TDev(Dev) do begin
PixelCheck := True;
Image := DXImageList1.Items.Find("dev");
Collisioned:=true;
Z := 0;
Width := Image.Width;
Height := Image.Height;
x:=320;
y:=400;
end;
Enemy := TEnemy.Create(DXSpriteEngine1.Engine);
Enemy_life:=100;
with TEnemy(Enemy) do begin
PixelCheck := True;
Image := DXImageList1.Items.Find("enemy");
Collisioned:=true;
Z := 0;
Width := Image.Width;
Height := Image.Height;
x:=320;
y:=20;
end;
end;
end.
← →
ZAROLF © (2003-12-22 07:43) [1]>Dmitrich (22.12.03 04:49)
>патрон при попадании в Tenemy не вызывает DoCollision
-----------------------------------------------------------------
procedure Tp.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TEnemy then
begin
Enemy_life:=Enemy_life-10;
dead;
Collision; //здесь
end;
end;
Procedure Tp.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
y:=y-5;
Collision; //и здесь
end;
Procedure Tenemy.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
.....
.....
//если враг двигается то тоже
Collision;
end;
procedure Tenemy.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Tp then
dead;
Collision; //и здесь
end;
Обязательно используй PixelCheck := True;
← →
Dmitrich (2003-12-23 04:33) [2]Огромное спасибо!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c