Kollisionsproblem / Erledigt

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Omenaton_2

Betreff: Kollisionsproblem / Erledigt

BeitragMo, Mai 24, 2010 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi !

Mir ist kürzlich ein schwerwiegendes Problem aufgefallen.
Das Raumschiff des menschlichen Spielers kollidiert nicht mehr mit den anderen Objekten ! Obwohl die Kollision schon seit mehreren Jahren gut funktioniert hat.

Ich untersuche schon seit 2 Tagen (mit Unterbrechung) diesen "Bug" (falls das einer ist) und gerade habe ich eine interessante und wie ich denke wichtige Feststellung gemacht :
Die Kollision wird nur dann erkannt, wenn das Schiff des Spielers mit einem sich bewegenden KI-Schiff kollidiert, sonst nicht.

Ich frage mich wie das sein kann.

Ich habe natürlich schon eine menge mögliche Fehlerquellen untersucht und soweit wie möglich ausgeschlossen :
Überprüft, ob nicht irgendwo (vielleicht aus Test oder Debugging Zwecken eingebaut und wegen Vergessen nicht wieder entfernt) diese Befehle falsch eingesetzt werden : Collisions, EntityType, EntityRadius, HideEntity, ResetEntity.

Es scheint so zu sein, daß die KI-Objekte miteinandern kollidieren können, weil ein fliegender Asteroid bleibt schön vor der Wand einer Station stehen (wie schon immer.)

Ich habe vor ca 2 Wochen angefangen das Herumlaufen im Schiffsinneren einzubauen. Das habe nun auch drin. (es fehlen noch 2 kleine zusätzliche Features.) Ich habe die Programmversion eingeladen, die ich BEVOR mit diesem Herumalufen Feature angefangen habe abgespeichert habe und da ist der Fehler auch schon drin.
Ich habe eine komplett Backup Version von April dieses Jahres, da ist der Fehler noch nicht drin.
Ich habe die meiner Meinung nach relevanten Stellen in den 2 Codes verglichen, konnte aber keine bedeutende Unterschiede feststellen.

Hat jemand eine Idee, woran ich vielelicht noch nicht gedacht habe ? Und was kann uns dieser Hinweis, daß die Kollision doch erkannt wird, sofern sich beide Objekte bewegen sagen ? Bringt das jemanden zu einer hilfreichen Erkenntnis ?
  • Zuletzt bearbeitet von Omenaton_2 am Mi, Mai 26, 2010 15:15, insgesamt einmal bearbeitet

ozzi789

BeitragMo, Mai 24, 2010 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du vlt UpdateWorld irgendwo anders stehn?

mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Omenaton_2

BeitragMo, Mai 24, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Idee.
Nein, UpdateWorld kommt nur 1 Mal in der Hauptschleife vor, so wie schon immer.

das wurgel

BeitragMo, Mai 24, 2010 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Da bist du warscheinlich schon selbst drauf gekommen aber ich würde an deiner Stelle noch Mal folgendes überprüfen:
- Werden die zu kollidierenden Kollisionstypen mit Collisions richtig definiert?
- Kriegen die Objekte auch den richtigen Kollisionstypen zugewiesen? (an dieser Stelle vielleicht ein DebugLog machen um zu prüfen ob es auch wirklich passiert)
- Werden die Kollisionen nach einen eventuell vorkommenden ClearCollisions() wieder angeschaltet?

Wenns das alles nicht ist, kannst du ja eine Kopie von der noch funktionierenden Version machen und nach und nach Codeteile von der aktuellen Version rüberkopieren und testen. Dann gibt es nur zwei Möglichkeiten: Entweder am Schluss funktioniert alles oder du weist eben Bescheid welcher Codeteil das Problem auslöst.
1 ist ungefähr 3
 

Omenaton_2

BeitragMi, Mai 26, 2010 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Es hat sich "erledigt".
Nach langer und schwieriger Suche, habe ich den Fehler (der eigentlich gar keine sein dürfte) gefunden und durch eine Umgehung gelöst.

Ich verstehe nicht wie das sein kann, aber den Bug, daß das Raumschiff des Spielers nicht mehr kollidiert, hat ein "ShowEntity" Befehl für das Schiff (Teil des allgemeinen Line of Sight Check Rutine für NPCs) verursacht.

Wenn es HideEntity oder ResetEntity gewesen wäre, hätte ich das verstanden und schon längst gefunden, aber SHOW !
Das ist schon sehr komisch.

An der Stelle ist es einfach nicht möglich (ohne den Fehler zu verursachen) das Schiff zu hiden und dann nach Line of Sight Check gleich wieder zu zeigen zu machen.
Deshalb habe ich da den einfachen Trick angewendet, das Schiff kurz nach oben zu heben und dann wieder zurück, hauptsache das Schiff ist während des Checks nicht im Weg.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group