AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kollision zwischen einem Sprite und einem Bild??
Thema durchsuchen
Ansicht
Themen-Optionen

Kollision zwischen einem Sprite und einem Bild??

Ein Thema von ISAS · begonnen am 9. Nov 2003 · letzter Beitrag vom 9. Nov 2003
Antwort Antwort
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#1

Kollision zwischen einem Sprite und einem Bild??

  Alt 9. Nov 2003, 16:34
Hab hier ein Sprite, das so erzeugt wird:

Delphi-Quellcode:
constructor TPlayer.Create(AParent: TSprite );
begin
  inherited Create(AParent);
  Image:=Form1.DXImageList1.Items[3];
  Width :=Image.Width;
  Height :=Image. Height;
  Visible:=True;
end;
Und das Bild wird so erzeugt:

DXImageList1.Items[2].Draw(DXDraw1.Surface,j*32,i*32,0); Nun kann ich das Bild nicht zu einem Sprite machen.
Ich weiss schon wie man das macht und wie die Kollision zwischen 2 sprites funktioniert.
Aber bei meinem Beispiel kann ich das so nicht machen. Es geht einfach nicht, weil es dann alles auf den Kopf stellt .
Unter umständen würde ich das Sprite auch in ein Bild machen, aber das würde ich nur machen, wenns sonst keine Lösung gibt.

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
ElDuckle

Registriert seit: 28. Okt 2003
Ort: München
4 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Kollision zwischen einem Sprite und einem Bild??

  Alt 9. Nov 2003, 18:00
Hi,

Wenn ich dich richtig verstehe, willst Du auf einem DXDraw.Surface direkt zeichnen, und anschließend überprüfen, ob dein Sprite damit kollidiert...

also, eigentlich ist die Sprite Engine von DelphiX für so was nicht vorbereitet...

aber.... ich hab eine Lösung gefunden.. ist aber schon recht knackig 8)

also im Unit DXSprite gibt es die Funktion ImageCollisionTest
diese Funktion vergleicht zwei DXDraw Surfaces, also genau das was Du brauchst... Leider ist diese Funktion nicht öffentlich, sondern steht nur im Implementierungsteil von DelphiX... also, mußt Du das als erstes ändern und die Deklaration der Funktion in den Interfaceteil des Units aufnehmen, am besten direkt vor der Implementation Anweisung:

Delphi-Quellcode:
unit DXSprite;
...
interface
...

function ImageCollisionTest(suf1, suf2: TDirectDrawSurface; const rect1, rect2: TRect; x1,y1,x2,y2: Integer; DoPixelCheck: Boolean): Boolean;

implementation
...
So, jetzt kannst Du die Funktion in deinem Code verwenden...
Du rufst die Funktion mit folgenden Parametern auf:

suf1: dein Hintergrund
suf2: dein Sprite-Image
rect1: Ausmaße von suf1
rect2: Ausmaße von suf2
x1,y1: Position von suf1
x2,y2: Position von suf2
DoPixelCheck: True, wenn Du transparente Farben verwendest

die Funktion gibt True zurück wenn eine Collision besteht

Hier noch ein Beispiel:

Delphi-Quellcode:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 if not DXDraw1.CanDraw then Exit;

  DXInput1.Update;
  DXSpriteEngine1.Move(1);
  DXDraw1.Surface.Fill(0);

  // Erst den Hintergrund zeichnen
  DXImageList1.Items[0].Draw(DXDraw1.Surface,0,0,0);

  if (
     ImageCollisionTest( DXDraw1.Surface,
                         DXImageList1.Items[1].PatternSurfaces[0],
                         Rect(0,0,DXDraw1.Surface.Width,DXDraw1.Surface.Height),
                         Rect(0,0,DXImageList1.Items[1].Width,DXImageList1.Items[1].Height),
                         0,0,
                         Round(Player.X), Round(Player.Y), true)) then
     begin
      // Wir haben eine Kollision mit dem Hintergrund !!
      beep;
     end;

  // Erst jetzt die Sprites zeichnen...
  DXSpriteEngine1.Draw;
  ...
ach ja, Du mußt bei dem Image deines Sprites in der Imagelist noch unbedingt in den Feldern PatternHeight und PatternWidth die Breite und Höhe deines Sprites angeben, sonst klappt's nicht...

ich hoffe das war einigermaßen verständlich , es funktioniert, habs gerade ausprobiert.

Viele Grüße,

El Duckle
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz