AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kollisionsabfrage bei Supermario-Klon

Ein Thema von Helarion · begonnen am 11. Mai 2006 · letzter Beitrag vom 12. Mai 2006
Antwort Antwort
Helarion
(Gast)

n/a Beiträge
 
#1

Kollisionsabfrage bei Supermario-Klon

  Alt 11. Mai 2006, 19:25
Erstmal Hallo an alle! (weils mein erster Post hier ist )

..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
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 11. Mai 2006, 19:48
Erstma Willkommen in der 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:
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;
oder so in der art

Aber nimm lieber DelphiX ^^
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 11. Mai 2006, 21:11
Hallo Helarion,

vielleicht möchtest du die Funktion Delphi-Referenz durchsuchenIntersectRect aus der Unit Types für die Kollisionsabfrage nutzen. Damit vermeidest du Fehler in komplizierten IF-Abfragen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Helarion
(Gast)

n/a Beiträge
 
#4

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 12. Mai 2006, 09:32
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 12. Mai 2006, 09:46
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);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Helarion
(Gast)

n/a Beiträge
 
#6

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 12. Mai 2006, 10:09
Juchhu!
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...
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 12. Mai 2006, 10:39
Zitat von SirThornberry:
IntersectRect verlangt koordinaten. du musst also von den 2 Images wo du testen willst ob sie kollidieren die koordinaten übergeben
Genau, man muß Koordinaten übergeben:

Delphi-Quellcode:
with Image1 do
  LRect1 := Rect(Left, Top, Left + Width, Top + Height);
with Image2 do
  LRect2 := Rect(Left, Top, Left + Width, Top + Height);
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Kollisionsabfrage bei Supermario-Klon

  Alt 12. Mai 2006, 10:44
Oh man, ich hatte es fast befürchtet. 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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 16:21 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