![]() |
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 |
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:
Ich möchte wenn Animation und Gegenstand sich berühren shwmessage('Bumm') ausgeführt wird... kann mir wer weiterhelfen?
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. Ferby |
Re: kollision bei delphix geht nicht
Kommt das OnCollisions Ereigniss überhaupt (Mit Debuger gucken).
|
Re: kollision bei delphix geht nicht
In "DoMove" musst du noch "Collision;" hinzufügen.
|
Re: kollision bei delphix geht nicht
Hallo,
danke werd ich heute ausprobieren, ferby |
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 |
Re: kollision bei delphix geht nicht
JUHHU...
Problem endlich gelöst: ich habe zwei SpriteEngiens verwendet, wenn ich nur eine nehme dann gehts..... |
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) |
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...
|
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