Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi kollision bei delphix geht nicht (https://www.delphipraxis.net/54138-kollision-bei-delphix-geht-nicht.html)

ferby 28. Sep 2005 16:58


kollision bei delphix geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ich habe heute angefangen Delphix zu lernen.
In meinem Programm kann sich ein schiff mithilfew der Pfeiltasten bewegen.
Ich will jetzt, wenn das Schiff in den Planeten fährt ein ereigniss ausgelöst wird... nur leider klappt es nicht.

Kann sich jemand das Programm runterladen und schauen was falsch ist... is nicht viel Quelltext zum anschauen.


Danke,
Ferby

ferby 29. Sep 2005 13:42

Re: kollision bei delphix geht nicht
 
Hallo,

kann mir wirklich keiner Helfen?

Ich dachte immer es geht so leicht mit Delphix Kollisionen abzufragen, wo ist mein Fehler??

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, DXClass, DXSprite, StdCtrls, Buttons, DXInput;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    DXImageList1: TDXImageList;
    DXTimer1: TDXTimer;
    DXSpriteEngine1: TDXSpriteEngine;
    DXInput1: TDXInput;
    DXSpriteEngine2: TDXSpriteEngine;
    procedure FormCreate(Sender: TObject);
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  // Für Animation
  TAnimation = class(TImageSprite)
  Public
    Procedure DoMove(MoveCount: Integer);override;
    Procedure DoCollision(Sprite: TSprite; var Done: Boolean);override;
  end;
  TGegenstand = class(TImageSprite);

var
  Form1: TForm1;
  Animation: TAnimation;
  Gegenstand: TGegenstand;

implementation

{$R *.dfm}
//////////////////////////////////////////////////////////////////////////////// FORM CREAT
procedure TForm1.FormCreate(Sender: TObject);
begin
  Animation := TAnimation.Create(DXSpriteEngine1.Engine);
  gegenstand := Tgegenstand.Create(DXSpriteEngine2.Engine);
  with Animation do
  begin
    Image := Form1.DXImageList1.Items.Find('schiff');
    X := 150;
    Y := 150;
    Width := Image.Width;
    Height := Image.Height;
    AnimCount := 3;
    AnimLooped := True;
    AnimSpeed :=1;
  end;

  with gegenstand do
  begin
    Image := Form1.DXImageList1.Items.Find('planet1');
    X := 50;
    Y := 50;
    Width := Image.Width;
    Height := Image.Height;
    AnimCount := 4;
    AnimLooped := True;
    AnimSpeed :=1;
  end;
end;

//////////////////////////////////////////////////////////////////////////////// Schiff
Procedure TAnimation.DoMove(MoveCount: Integer);
Begin
  Inherited DoMove(MoveCount);
  If IsUp in Form1.DXInput1.States Then Y:=Y-3;
  If IsLeft in form1.DXInput1.States Then X:=X-3;
  If IsDown in form1.DXInput1.States Then Y:=Y+3;
  If IsRight in form1.DXInput1.States Then X:=X+3;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXInput1.Update;
  DXSpriteEngine1.Move(1);
  DXSpriteEngine2.Move(1);
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXSpriteEngine2.Draw;
  DXDraw1.Flip;
end;

procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
 if (sprite is TGegenstand) then showmessage('Bumm');
end;

end.
Ich möchte wenn Animation und Gegenstand sich berühren shwmessage('Bumm') ausgeführt wird... kann mir wer weiterhelfen?

Ferby

franktron 29. Sep 2005 13:49

Re: kollision bei delphix geht nicht
 
Kommt das OnCollisions Ereigniss überhaupt (Mit Debuger gucken).

Die Muhkuh 29. Sep 2005 13:55

Re: kollision bei delphix geht nicht
 
In "DoMove" musst du noch "Collision;" hinzufügen.

ferby 29. Sep 2005 14:49

Re: kollision bei delphix geht nicht
 
Hallo,

danke werd ich heute ausprobieren,

ferby

ferby 29. Sep 2005 18:05

Re: kollision bei delphix geht nicht
 
Hallo,

geht leider immer noch nicht... es passiert nichts sobald sich die zwei grafiken berühren.

hier der etwas abgeänderte quellcode:

Delphi-Quellcode:
TGegenstand = class(TImageSprite)
  Public
    Procedure DoMove(MoveCount: Integer);override;
  end;

  TAnimation = class(TImageSprite)
  Public
    Procedure DoMove(MoveCount: Integer);override;
    Procedure DoCollision(Sprite: TSprite; var Done: Boolean);override;
  end;

var
  Form1: TForm1;

  Gegenstand: TGegenstand;
  Animation: TAnimation;

implementation

{$R *.dfm}
//////////////////////////////////////////////////////////////////////////////// FORM CREAT
procedure TForm1.FormCreate(Sender: TObject);
begin
  gegenstand := Tgegenstand.Create(DXSpriteEngine2.Engine);
  Animation := TAnimation.Create(DXSpriteEngine1.Engine);

  with gegenstand do
  begin
    Image := Form1.DXImageList1.Items.Find('planet1');
    X := 250;
    Y := 50;
    Width := Image.Width;
    Height := Image.Height;
    AnimCount := 4;
    AnimLooped := True;
    AnimSpeed :=1;
  end;

  with Animation do
  begin
    Image := Form1.DXImageList1.Items.Find('schiff');
    X := 50;
    Y := 100;
    Width := Image.Width;
    Height := Image.Height;
    AnimCount := 3;
    AnimLooped := True;
    AnimSpeed :=1;
  end;
end;

//////////////////////////////////////////////////////////////////////////////// Schiff
Procedure TAnimation.DoMove(MoveCount: Integer);
Begin
  Inherited DoMove(MoveCount);
  If IsUp in Form1.DXInput1.States Then Y:=Y-4;
  If IsLeft in form1.DXInput1.States Then X:=X-4;
  If IsDown in form1.DXInput1.States Then Y:=Y+4;
  If IsRight in form1.DXInput1.States Then X:=X+4;
  Collision;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXInput1.Update;
  DXSpriteEngine1.Move(1);
  DXSpriteEngine2.Move(1);

  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXSpriteEngine2.Draw;

  DXDraw1.Flip;
end;


procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
 if (sprite is TGegenstand) then showmessage('test');
end;

Procedure TGegenstand.DoMove(MoveCount: Integer);
Begin
  Inherited DoMove(MoveCount);
  X:=X-1;
end;


Was ist daran falsch??


Ferby

ferby 29. Sep 2005 18:50

Re: kollision bei delphix geht nicht
 
JUHHU...

Problem endlich gelöst: ich habe zwei SpriteEngiens verwendet, wenn ich nur eine nehme dann gehts.....

ferby 29. Sep 2005 19:06

Re: kollision bei delphix geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

super.. jetzt hab ich schon wierder ein neues Problemm. Es wird auch eine kollision ausgelößt bei bildteilen die transparent sind, wie kann ich das verhindern??

Im Anhang ist ein Beispiel bei den die Kolision ausgelößt wird. (für das Foto habe ich transparent auf false gesetzt)

Neutral General 29. Sep 2005 19:20

Re: kollision bei delphix geht nicht
 
Da musst du die Eigenschaft Pixelcheck von dem Sprite/den Sprites auf true stellen. Dann gehts... einigermaßen.. also bei mir ist die Kollision dann zwar meistens genau(er) aber oft irgendwie verbuggt...

ferby 29. Sep 2005 19:43

Re: kollision bei delphix geht nicht
 
Hallo,

ich merke keinen unterschied :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz