AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Problem beim Bereich prüfen.
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Bereich prüfen.

Ein Thema von Blackstyle94 · begonnen am 19. Aug 2011 · letzter Beitrag vom 20. Aug 2011
Antwort Antwort
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#1

Problem beim Bereich prüfen.

  Alt 19. Aug 2011, 22:35
HalliHallo,

Ich habe durch die Schule das Programmieren für mich entdeckt und dachte mir lass doch mal ein kleines einfaches 2D Shooter Spiel programmieren. Das Spiel ist schon fast fertig, aber am Ende hatte ich ein Problem.

Ich konnte durch die Schüsse niemanden treffen. Ich habe versucht mit Koordinaten zu arbeiten und habe versucht dem Programm zu sagen er soll dem Spieler ein Leben abziehen wenn Bild1(Der Spieler) und Bild2(Die Munition) auf der selben Koordinate liegen. Dies funzte nicht. Später erkannte ich auch warum. Mein Schuss bewegt sich mit der Einheit 15 durch das Formular und so können die sich nie treffen weil die Munition den Spieler immer überspringt. Ab da war mir klar, dass ich einen Bereich prüfen lassen sollte und nicht nur einen Punkt. Leider weiß ich nicht wie es geht, habe auch recherchiert, aber natürlich fand ich nichts.

Deshalb meine Frage an euch: Kennt jemand einen Befehl, wodurch man dies zustande bringen könnte. (Hoffe habe genug Infos gebracht).

Danke im Vorraus
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem beim Bereich prüfen.

  Alt 19. Aug 2011, 22:52
Hallo und herzlich willkommen!

Mir fällt da erst mal ein, die Bewegung um einen Schritt auszuführen.
Ansonsten müsstest Du vermutlich eine virtuelle Linie zur Zielposition berechnen und eine Kollision der Line mit dem Objekt prüfen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Problem beim Bereich prüfen.

  Alt 20. Aug 2011, 00:45
Du kannst natürlich mathematisch prüfen:
getroffen := ((Bullet.Right >= Enemy.Left) and (Bullet.Right <= Enemy.Right)) or ((Bullet.Left <= Enemy.Right) and (Bullet.Left >= Enemy.Left)) or ((Bullet.Left <= Enemy.Left) and (Bullet.Right >= Enemy.Right)); (Die letzte Bedingung ist unnütz, wenn die Projektile stets schmaler sind als die Gegner.)
Okay, ist eher logisch geprüft, aber mathematisch motiviert. Nennt sich "AABB"-Test (Axis-Aligned-Bounding-Box Test).

Allerdings hast du dann noch immer ein Problem, wenn beide beteiligten kleiner als die Schrittweite sind (also in deinem Fall unter 15 Pixel), da dann Überspringen noch geht. Um das auch zu behandeln, bleibt wirklich nur noch der Ansatz mit linearer Algebra (Schnittpunktberechnung der Flugbahn des Projektils mit den Kanten des Gegners), was stahli auch nannte. Bei langsamen Projektilen - klingt bei dir so - sollte man zudem nicht auf Geradenschnitt, sondern bildweise auf Streckenschnitt prüfen. (Also normalisierten Richtungsvektor mit der Geschwindigkeit skalieren, und nach dessen Parameter auflösen. Ist der zwischen 0 und 1 gabs nen Schnitt im aktuellen Frame.)
Alles aber unnötig, wenn eben mindestens ein beteiligtes Kollisionselement in allen relevanten Richtungen größer als die Schrittweite ist, dann das simple AABB. (Vorausgesetzt, eine Begrenzung deiner Gegner anhand ihrer linken und rechten Grenzen ist ausreichend. Bei größeren/komplexeren kann das auch schon wieder zu grob sein, das ist Ermessenssache. Allerdings kommt man dann mit Bitmaps eh nicht mehr wirklich gut weiter, dann müsste alles in vektorieller Form vorliegen.)

Viel wichtiger: Wilkommen in der DP!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#4

AW: Problem beim Bereich prüfen.

  Alt 20. Aug 2011, 00:48
Mit würde spontan einfallen, das mit hilfe eines Vektors zu berechnen.

Die Schusslinie ist dann ein Vektor und wenn der Gegner ein Element des Vektors ist (also der Spieler auf dem Vektor liegt), ist er getroffen.
Wenn ihr Vektoren in der Schule schon hattet und du ein bisschen fit in Mathe bist, sollte das nicht so kompliziert werden.

Ortsvektor(Spieler) + Entfernung(Spieler - Gegner) * Richtungsvektor(Schuss) = Ortsvektor(Gegner) ==> Treffer

so inetwa müsste das gehn

Viele Grüße

Tobi.
Tobias
  Mit Zitat antworten Zitat
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Problem beim Bereich prüfen.

  Alt 20. Aug 2011, 11:03
Hay,

Also danke erstmal für die schnellen Antworten. Hätte nicht gedacht, dass über die Nacht so viele bzw. überhaupt eine Antort kommen würde .

Eure Antworten sagen mir leider nicht viel, da ich erst vor 2 Wochen angefangen habe. Mein Spiel selbst besteht daher auch nur aus simplen Befehlen. Aber ich werde mich ma ein bisschen schlau machen über die Punkte, die ihr geschrieben habt und dann mal ausprobieren. Sage euch dann Bescheid wenns klappt.


So Far
Blackstyle94
  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 18:48 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