Blitz-Terrain Player Platzierung Problem [gelöst]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

antome

!!! gesperrt !!!

Betreff: Blitz-Terrain Player Platzierung Problem [gelöst]

BeitragDi, Feb 20, 2007 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe ein sehr merkwürdiges Problem und habe bisher dazu weder auf der offiziellen Seite noch hier was dazu gefunden.

Wenn ich in meinem Editor auf einem Blitzterrain herumlauf um eine geeignete Startposition für den Player zu finden passiert mir in ca. 50 % das der Player nach dem einsetzen an diesen Koordinaten an einem ganz anderen Platz erscheint.

z.B. ich gebe die Koordinaten 1245.77 für X und 2830.96 für Z ein, die Höhe Y berrechne ich immer an Ort und Stelle dann erscheint der Player plötzlich bei 972.447 X und 2210.0 Z, ändere ich die Koordinaten ein wenig z.B. hier 1265.77 für X erscheint der Player wo er soll.

Manchmal passierte mir auch das der Player an bestimmten Einsetzpunkten durch den Boden fällt , obwohl ich zu der Höhe probeweise jede Menge dazu gegeben hab um den Player durch die Anziehungskraft an den Boden zu bekommen, doch nichts, er fällt an manchen Stellen durch aber nur wenn ich ihn einsetze, beim gehen auf dem Terrain passiert das nie.

Ich habe auch eine kleine Auffangroutine eingebracht, wenn der Player sich unterhalb des Bodens befinden sollte wird er automatisch etwas weiter nach oben gesetzt um wieder von der Anziehung auf den Boden gesetzt zu werden, aber bei manchen Einsetzpunkten entsteht dadurch ein Effekt das der Player durch fällt nach oben gesetzt wird und das immer hin und her.
Das mit dem durchfallen geschieht nicht ganz so oft wie das versetzen der X/Z Koordinaten.

Es wäre im Prinzip auch kein großes Problem, ich würde einfach so lange testen bis ich einen geeigneten Einsetzpunkt finde, aber ich will ja den Spielstand später speichern und wieder laden, da soll der Player eben da eingesetzt werden wo er vorher zuletzt stand, aber wenn er dann plötzlich auf einem Berg bei ganz anderen Koordinaten wieder auftaucht als er soll finde ich das ein wenig problematisch.

Kennt jemand eine Lösung zu dem Problem oder hat den selben Effekt bei sich auch schon gehabt ?
antome
  • Zuletzt bearbeitet von antome am Di, Feb 20, 2007 14:21, insgesamt einmal bearbeitet
 

coldie

BeitragDi, Feb 20, 2007 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte es vielleicht etwas mit dem automatischen LOD des Terrains, und dadurch auftretende Kollisions-Ungenauigkeiten zu tun haben?
Arbeitest du mit TerrainY() oder mit was anderem?

NightPhoenix

BeitragDi, Feb 20, 2007 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit den koordinaten scheint ein rundungsfehler zu sein... mmmh seltsam...
das mit den blitzterrains ist um ehrlich zu sein, generell ungünstig für solche vorhaben... eben weil die spieler ja auf einem veränderbaren terrain herum laufen.... wenn da mal ne gerade beim näheren heranlaufen gerundet wird unf plötzlich der spieler damit unter der erde dann zischt der ja ohne Kollision durch...
Ein Meshterrain würde sich besser eignen
MfG.
 

antome

!!! gesperrt !!!

BeitragDi, Feb 20, 2007 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die genaue Höhe am Punkt des Spielers zu bestimmen benutze ich TerrainY da TERRAINHEIGHT# dafür zu ungenau ist, ich glaube nicht das es mit dem LOD zu tun hat, denn in der unmittelbaren Umgebung dürfe sich das nicht auswirken und die permanente Höhenanzeige hat auch nie geflackert.

Man könnte das durchfallen mit dem LOD noch erklären und evtl. einen unsichtbaren Würfel mit Collisionserkennung an der Startposition vorübergehend anbringen, aber die X/Z Verschiebung ist mir noch das größte Rätsel.
antome
 

coldie

BeitragDi, Feb 20, 2007 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Die X/Z Verschiebung könnte ja vielleicht durch die Kollision mit dem Gelände entstehen. Wenn dem so wäre ließe sich möglicherweise mit Resetentity etwas machen.

Könnte es nicht auch daher kommen, dass der Spieler an Position 0 erstellt wird, und dann über das Terrain platziert wird, so dass er für die Kollisionsabfrage in zwischen diesen zwei Positionen mit dem Terrain kollidiert sein muss?

NightPhoenix

BeitragDi, Feb 20, 2007 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ist mir auch schonmal aufgefallen... mit positionentity wird ein objekt auch nur bewegt und nicht neu gesetzt... wenn zwischen 2 punkten von "positionentity 1" und "positionentity 2" eine mauer steht mit der der spieler kollidieren kann, dann bleibt er an der Mauer auch hängen!
Erst wenn er jetzt irgendwie die Mauer umgeht springt der Spieler dann wirklich zum vorgesehenen Punkt....

Also ich schlage vor du deaktivierst die kollisionen für die schleife wo du die spieler setzen tust und wo du sie speicherst.
  • Zuletzt bearbeitet von NightPhoenix am Di, Feb 20, 2007 12:18, insgesamt einmal bearbeitet
 

antome

!!! gesperrt !!!

BeitragDi, Feb 20, 2007 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@coldie
Ich platziere den Spieler mit PositionEntity nur mit MoveEntity dürfte sowas passieren, aber ich habe es probehalber getestet und den Spieler nach der Erstellung mal in der Mitte der Karte in einer Höhe von 20000 platziert, aber es tritt genau das selbe Problem wieder auf.
Der Versatz ist beträchtlich ist aber immer an der selben Position, habe gerade auch eine ältere Version von Blitz3D V 191 getestet, genau das selbe Problem.
antome
 

coldie

BeitragDi, Feb 20, 2007 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@antome: Wie NightPhoenix schon sagte: Es scheint für die Kollisionsabfrage egal zu sein ob ein entity mit MoveEntity oder mit PositionEntity bewegt wurde.
 

antome

!!! gesperrt !!!

BeitragDi, Feb 20, 2007 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, das scheint tatsächlich die Lösung des Problems zu sein, aber komischerweise war die Collision mit Collisions ..... noch gar nicht aktiviert bevor ich mit PositionEntity den Player gesetzt hab, ich habe nun einfach EnityType nach PositionEntity im Startup Code gesetzt und nun erscheint der Spieler an der vorgesehenen Position.

Danke für eure Hilfe
antome

skey-z

BeitragDi, Feb 20, 2007 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey antome,

wie wäre es mal, wenn du deine Positionierungsroutine mal hier rein stellst, dann kann man den Fehler vlt besser herausbekommen, den eine Verschiebung um etwa 300 Einheiten erschein mir doch relativ hoch, um zb. durch Kollision hervorgerufen zu werden.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

NightPhoenix

BeitragDi, Feb 20, 2007 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Biddö ^^
Kollisionen sind halt unberechenbar Wink
 

coldie

BeitragDi, Feb 20, 2007 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich stelle mir das so vor:

Die Kollisionsroutine speichert nach jeder Prüfung die aktuelle Position eines Entitys, und überprüft alle Kollisionsmöglichkeiten die zwischen dieser und der vorherigen Position liegen.
Wenn man ein EntityType zuweist, wird sofort die Position des Entitys als erste Position gespeichert.
Somit kommt der Unterschied zustande, ob man ein Entity zuerst positioniert oder ihm zuerst einen EntityType zuweist.
 

antome

!!! gesperrt !!!

BeitragDi, Feb 20, 2007 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@skey-z

Es handelt sich dabei nicht um eine Function oder Sub-Routine
es geschieht direkt beim Programmstart.

Ich habe meine Startposition für den Spieler in 3 Variablen gespeichert und wird kurz vor der Hauptschleife ausgeführt, die Angabe von Collisions geschieht erst in der Hauptschleife.

Spieler ist ein Parent Pivot mit Enityradius und eine Kamera.
Der Radius ist größer wie die Fallgeschwindigkeit, damit der Spieler nicht durch den Boden fällt.
Das geschieht auch innerhalb des Programmes nie, nur nach dem Start.
Ob dieses Problem jetzt noch besteht muss ich erst noch testen, trat aber weit weniger oft auf als die X/Z Versetztung welche sich komischer weiße an der selben Position befand, obwohl ich den Spieler probehalber von 0,0,0
auf 2500,20000,2500 und von da an zu zu seiner eigentlichen Startposition
auf 1245.77, 33.0, 2830.96 gesetzt habe, es war der selbe Versatz.
Wenn ich ClearCollisions vor PositionEntity einsetzte ist der Versatz immer noch der Selbe.
Weise ich aber EntityType dem Spieler (Pivot) erst nach seiner entgültigen Position zu, erscheint der Spieler wo er soll.
Obwohl durch alleinige Angabe von EntityType im Programmablauf noch keine Kollisionserkennung durchgeführt wird.

Es funktioniert zwar, gibt mir aber immernoch Rätsel auf.
antome

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group