Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

опять 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.125 c
1-1083252087
ЧупаЧупс
2004-04-29 19:21
2004.05.16
vtChart + setuper


9-1072057789
Dmitrich
2003-12-22 04:49
2004.05.16
опять DoCollision


1-1083311730
Ш-К
2004-04-30 11:55
2004.05.16
FreeAndNil


14-1083135450
paul_k
2004-04-28 10:57
2004.05.16
Предлагаю улыбнутся


11-1069691640
Phantom
2003-11-24 19:34
2004.05.16
Динамически создать пункты Popup-меню