Kollisionsreaktion da, aber trotzdem CountCollisoins=0

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

horstböhse

Betreff: Kollisionsreaktion da, aber trotzdem CountCollisoins=0

BeitragDo, Nov 17, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!!

Also, ich habe ein Problem mit der Kollision!! Der witz an der Geschichte ist, dass es schon funktioniert hat, und jetzt plötzlich nicht mehr, obwohl ich nichts an der Kollisionsroutine geändert habe!!

Ich möchte prüfen, wieviele meiner Objekte mit dem Level (ein Mesh) kollidiert sind!!

Das mache ich wie folgt:

Initialisierung:


BlitzBasic: [AUSKLAPPEN]
Function InitKollision(kmesh)

s.spielerliste=First spielerliste
While(s<>Null)

EntityType(s\Hover,1)
EntityRadius(s\Hover,s\Radius)

s=After s

Wend

EntityType(kmesh,2)

;Kollisionsprüfung mit der Wand
Collisions(1,2,2,1)
;Kollisionsprüfung der Gleiter untereinander
Collisions(1,1,1,1)

End Function


In der Spielschleife:


BlitzBasic: [AUSKLAPPEN]
Function KollisionGleiter(kmesh)

;HilfsVektoren
Local V1#[1]
Local V2#[1]
Local V3#[1]

;Kollisionsprüfung mit der Wand

;Collidiertes Entity suchen
;If(CountCollisions(kmesh)<>0) Stop

For i= 1 To CountCollisions(kmesh)
Stop
For s.spielerliste=Each spielerliste

If(s\hover=CollisionEntity(kmesh,i))

...


Das Problem: Die Kollision funktioniert, denn BB hält das Objekt bei der Berührung mit der Wand(kmesh) an!!
Allerdings geht das Programm nie in die 1. For-schleife, was ich daran sehe, dass der Debugger nicht anhält!!

Ich habe schon alles haarklein durchgesehen, die Übergabeparameter stimmen und alles!!

Ich weiß nicht mehr weiter, und wie gesagt, so, wie es hier steht, hat es schonmal funktioniert!!

Hoffentlich kann mir jemand helfen!!

Shodan

BeitragFr, Nov 18, 2005 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions(1,2,2,1) besagt, dass der Gleiter mit der Wand kollidieren kann, nicht umgekehrt! D.h. du musst den Gleiter auf Kollision abfragen, nicht die Wand.
Du musst Collisions(2,1,2,1) setzen um die Wand mit den Gleitern kollidieren zu lassen und um dies abfragen zu können. Das setzt aber wiederum vorraus das die Wand sich bewegt um eine Kollision zu verusachen. Generell sollte die Kollisionsabfrage vom schnelleren zum langsameren Objekt erfolgen. Schüsse treffen auf Spieler. Spieler trifft auf Wände. Schüsse treffen auf Wände.

Du rufst auch Countcollisions() mehrmals auf. Die zahl der Collisionen wird beim erstenmal ausgegeben. Danach ist der Stack leer. Wenn du jetzt wieder Countcollisions() für dasselbe Objekt aufrufst, wird 0 zurückgegeben. Erst nach dem nächsten Schleifendurchlauf mit Collisionen und UpdateWorld() kannst du es wieder aufrufen.
Übergib den Wert von Countcollisions() an eine Variable und frage den Gleiter ab, nicht die Wand
BlitzBasic: [AUSKLAPPEN]


For s.spielerliste=Each spielerliste
count=CountCollisions(s\hover)
If count <>0 Then Stop


statt
BlitzBasic: [AUSKLAPPEN]

For i= 1 To CountCollisions(kmesh)
Stop
For s.spielerliste=Each spielerliste


Ich hoffe ich konnte dir helfen.

Shodan
www.selfmadegames.de
 

horstböhse

BeitragMo, Nov 21, 2005 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
So hätte ich es dann auch gemacht, wenn ich das Problem nicht gelöst hätte!!

Was mich halt bloß verwundert, ist, dass es auf diese Weise schon funktioniert hat!! Wahrscheinlich war das dann Zufall, was?

Naja, jetzt weiß ich auf jedenfall, dass ich es anders machen muss!!

Vielen Dank, hast mir sehr geholfen!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group