![]() |
Kollisionsabfrage bei Supermario-Klon
Erstmal Hallo an alle! (weils mein erster Post hier ist :mrgreen: )
..und jetzt zum Geschäft. Wie der Titel schon sagt geht es um Kollisionsabfrage. Die Fakten: - spiel ist mit Image Dateien realisiert - Marios'-Klon läuft und hüpft einwandfrei (per left/top des Images) - Gegner laufen per random(als .img) von links nach rechts - es gibts ein paar Images die Hindernisse, bzw. "bekltterbare" Objekte sein sollen Das Problem: Mein Mario hüpft an den Gegnern und Hindernissen nur so vorbei und meine "Mario/Gegner-ist-tot" funktion wird nicht ausgelöst. Stellt sich die Frage wie ich dies mit ".left" und ".top" so benutzen kann das die sich gegenseitig erkennen und meine "tot" funktion ausgelöst werden kann oder er auf den Hindernissen stehen bleibt. Bitte sagt mir nicht ich soll die SUchfunktion, etc. nutzen. Da bin ich eben schon drin verloren gegeangen... Würde mich über Codeschnipsel, Links zu Kollisionsabfrage Turorials (die auf mein Problem mit den Images zutreffen) und alles was euch sonst hierzu hilfreich erscheint freuen! Danke schon mal im vorraus :| :lol: |
Re: Kollisionsabfrage bei Supermario-Klon
Erstma Willkommen in der dp :dp:
danch würde ich dir erstma DelphiX empfehlen oder sonstige Kompos dazu. wenn du aber bei deiner alten sache bleiben willst geb ich dir mal den tipp die breite und höhe dazu zu addieren. was ich meine :
Delphi-Quellcode:
oder so in der art
If (gegner.left>spieler.left)
and (gegner.left<(spieler.left+Spieler.width)) and (gegner.top<spieler.top) and (gegner.top>(spieler.top+spieler.height)) then tot; Aber nimm lieber DelphiX ^^ |
Re: Kollisionsabfrage bei Supermario-Klon
Hallo Helarion,
vielleicht möchtest du die Funktion ![]() Gruß Hawkeye |
Re: Kollisionsabfrage bei Supermario-Klon
Das mit If-Abgfragen hatte ich auch schon. Muss man aber wie Hawkeye richtig erkannt hat gut aufpassen was man macht, besonders bei mehreren Gegnern. Wie ich mit der DirectX Veariante umgehen kann hab ich keine Ahnung, ergo nicht mal sog. DelphiX (oder ist das in Delphi 7 - Ent. ennthalten?).
Gibt es DelphiX irgendwo als free-/shareware? IntersectRect könnte das sein was ich brauch, sieht so aus als müsst ich mir das wissen über die funktionsfähigkeit davon aber auch erst aneignen. Kann man(n) in der Intersect auch Images einbauen? Und wie? MfG Hel |
Re: Kollisionsabfrage bei Supermario-Klon
IntersectRect verlangt koordinaten. du musst also von den 2 Images wo du testen willst ob sie kollidieren die koordinaten übergeben:
Delphi-Quellcode:
var LRectUeberlappung,
LRect1, LRect2 : TRect; LSindKollidiert : Boolean; begin LRect1 := Rect(Image1.Left, Image1.Top, Image1.Width, Image1.Height); LRect2 := Rect(Image2.Left, Image2.Top, Image2.Width, Image2.Height); LSindKollidiert := IntersectRect(LRectUeberlappung, LRect1, LRect2); |
Re: Kollisionsabfrage bei Supermario-Klon
Juchhu! :thumb:
Danke euch allen, besonderst SirThornberry. Hab ein bisschen gebastelt und die 0-8-15-Variante scheint soweit zu funzen. Wenn ich das auch noch mit mehreren Gegnern zum laufen bring ist das Game so gut wie fertig... :-D |
Re: Kollisionsabfrage bei Supermario-Klon
Zitat:
Delphi-Quellcode:
Gruß Hawkeye
with Image1 do
LRect1 := Rect(Left, Top, Left + Width, Top + Height); with Image2 do LRect2 := Rect(Left, Top, Left + Width, Top + Height); |
Re: Kollisionsabfrage bei Supermario-Klon
Oh man, ich hatte es fast befürchtet. :oops: Leider wird man bei sowas aus der OH meist nicht schlau und bei einigen anderen Funktionen wird Buttom und Right manchmal als Höhen- und Breitenangabe interpretiert.
@Helarion: Um das ganze für mehrere Gegner zu realisieren pack es einfach in eine Funktion und ruf die Funktion für jeden Gegner(TImage) auf. Die Funktion also einfach per schleife mit jedem aufrufen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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