Kollision Links, Rechts, Oben oder unten?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Ratchet

Betreff: Kollision Links, Rechts, Oben oder unten?

BeitragFr, Aug 05, 2005 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze ImagesCollide zur Kollisionsprüfung.
Wie kann ich rausfinden welche beiden Seiten miteinander kollidieren?
Stoße ich z.B. mit Bild1 von unten an Bild2 kollieret Bild1 an der oberen Kante mit Bild2 an der unteren Kante.
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]
  • Zuletzt bearbeitet von Ratchet am Fr, Aug 05, 2005 15:48, insgesamt einmal bearbeitet

Mr.Keks

BeitragFr, Aug 05, 2005 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Falsches Forum


Du kannst auch verschoben auf Kolli prüfen.

Oder du schaust mal in den Modulcode von Max2d und modifizierst den so, dass du leicht die Kolliposition herausfindest.
MrKeks.net

Ratchet

BeitragFr, Aug 05, 2005 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, war lange nicht mehr hier und habe nicht gesehen das es einen extra BMX Bereich gibt Smile

Inarie hat Folgendes geschrieben:
Du kannst auch verschoben auf Kolli prüfen.
Versteh ich nicht. Bitte mal erläutern.

Inarie hat Folgendes geschrieben:
Oder du schaust mal in den Modulcode von Max2d und modifizierst den so, dass du leicht die Kolliposition herausfindest.

Na toll, und bei jedem Lib Update darf ich dann den Code wieder ändern...
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

Smily

BeitragFr, Aug 05, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergleiche doch einfach die Positionen von den Bildern Miteinander.
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Serge

BeitragSa, Aug 06, 2005 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einfachen Positionsvergleichen kommt man da überhaupt nicht weiter.
Oder wie genau will man es machen? Ein Objekt kann auch von Oben kollidieren und so aussehen, als wäre es von der Seite gekommen.

Du müsstest von den Objekten jeweils die vorherigen Positionen (vor dem bewegen) speichern und wenn eine Kollission entsteht, dann setzt du beide Objekte auf ihre alte X Position (die Y-werte bleiben erstmal gleich)
und prüfst erneut auf kollission. Wenn sie immernoch kollidieren, dann heißt es, dass die X Positionen dazu nix beigetragen haben. D. h. Die Objekte sind entweder von unten oder von Oben aufeinandergestoßen.
Wenn die Objekte nach dem zurücksetzten der X Positionen jedoch nicht mehr kollidieren, setzt man die X Positionen wieder auf die aktuellen werte und macht das ganze nochmal mit Y Positionen. Wenn die Objekte dabei nach dem Zurücksetzen immernoch kollidieren, muss die Kollission entweder von Links oder von Rechts erfolgt sein.
Wenn sie hierbei immer noch nicht kollidieren, dann heißt es, dass die Kollission diagonal an einer der Ecken statgefunden hat.

Um nun herauszufinden ob die Kollission von Oben bzw. Unten kam, muss man die dY, bzw. die werte der letzten Bewegung in Y richtung beider Objekte hernehmen, addieren, und gucken ob sie >0 oder <0 ist.
Bei links oder Rechts dann dementsprechend dX. Um rauszufinden an welchen Ecken sie zusamengestoßen sind, müsste man beides hernehmen.

Es ist zwar aufwendig, aber afaik die einzige wirklich sichere Methode.
http://www.dark-matter-soft.de
 

krux

BeitragFr, Aug 12, 2005 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte das problem auch. Ich hab einfach nicht mehr geprüft ob die bilder übereinstimmen sondern an verschiedenen Punkten meines objektes geprüft ob dieser pixel mit der wand oder was auch immer kollidiert. Wenn es der Pixel unten ist es eine kollision von unten usw...
 

ZorroZ.ch

BeitragSo, Aug 14, 2005 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen,
ich bin nun am meinem ersten grösseren Spiel dran. Es wird ein simples 2D Jump&Run-Spiel. Nun bin ich soweit, dass ich die Spielfigur auf eine Kollision abfragen muss. Ich habe auch das Problem, welches gerade Ratchet hat. Wie mache ich es am Besten, dass ich weiss, auf welcher Seite sich das Objekt befindet, welches mir gerade den Weg versperrt. Meine Idee sieht bis jetzt folgendermassen aus:

In der Spielwelt gibt es bis jetzt noch keine zerstörtbaren Objekte, deshalb überlegte ich mir, ob es wohl möglich sei einfach die Spielfigur mit einer For-Schleife auf Kollisionen mit ALLEN 1000 Spielsteinen abfragen sollte. Damit ich dann auch noch weiss, von welcher Seite das Objekt kam, könnte ich ja oben, unten, links und rechts je ein transparentes Bild zeichen, welches AUF jeden Spielstein überprüft wird. Nun aber das ABER:

Ist es möglich das BB, respektiv der CPU ein bisschen überlastet ist mit 4000 Kollisionsabfragen pro Durchlauf der Spieleschleife?

Danke, trotzdem schon jetzt
 

Ava

Gast

BeitragMo, Aug 15, 2005 17:26
Antworten mit Zitat
Zitat:
Ist es möglich das BB, respektiv der CPU ein bisschen überlastet ist mit 4000 Kollisionsabfragen pro Durchlauf der Spieleschleife?


Very Happy

Warum glaubst Du, ist es notwendig für Dich, alle diese vielen Spielsteine ständig abzufragen? - Du hast die Position des Spielers, Du hast die Positionen der Steine ... und wenn diese nicht einfach unregelmässig kreuz und queer total chaotisch überall verteilt sind, dann kannst Du sie in ein Array eintragen, anhand der Spielerposition ein (oder mehrere) mögliche Kollisionsfelder/Positionen innerhalb des Arrays errechnen und dann nur diese (vielleicht 4 Felder = oben-links, oben-rechts, unten-links, unten-rechts) auf Kollsion mit dem Spieler testen. Wenn Du den Level in Deinem Spiel nicht einer Tilemap ähnlich aufbaust, also keine festen Positionen für Deine Spielsteine hast, müsstest Du Dir für diese Lösung vorher irgendwie ein Referenz-Array für Deine Spielsteine anlegen.

Wenn Du das soweit hast, könntest Du dann eine Schleife für die Bewegung des Spielers anlegen (wie Du es auch schon gedacht hattest) und darin relativ einfach anhand der Bewegungsrichtung und der Position des/der überprüften Arrays auch die Kollisionsrichtung ermitteln. Smile

Ich hoffe ich habe da jetzt keinen groben Denkfehler drin, es ist schon lange her, dass ich selbst mal soetwas geschrieben habe. Smile
 

ZorroZ.ch

BeitragMo, Aug 15, 2005 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, danke für deine Antwort. Mittlerweiile habe ich eine mehr oder weniger gute Lösung duch das Kombinieren von verschiedenen Befehlen gefunden. So ist die Kollisionsabfrage sehr schnell und dazu auch noch korrekt.

Gruss von ZorroZ.ch

rema

BeitragMo, Aug 15, 2005 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du deine Lösung mal posten? Wäre super.

Ratchet

BeitragDi, Mai 08, 2007 9:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hole diesen Thread nochmal nach oben, da ich mal wieder ein wenig aktiv mit BMX arbeite und wieder vor besagtem Problem stehe. Ich komme da einfach nicht weiter. Auch das Durchstöbern allmöglicher Tutorials hat nichts gebracht. Dort wird immer nur beschrieben wie die Kollisionsfunktionen allgemein funktionieren. Ein bischen Code wäre wirklich hilfreich.
Danke.
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group