Kollisionsmöglichkeiten wenn sich alles bewegen kann

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Omenaton_2

Betreff: Kollisionsmöglichkeiten wenn sich alles bewegen kann

BeitragSa, Mai 01, 2010 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

Ich bin an einem Punkt in der Entwicklung meines Weltraumspieles angelangt, an dem ich überlege ob ich einen alten Wunsch-Feature von mir tatsächlich verwirklichen kann oder es lieber erstmal aufgeben soll.

Ich möchte Folgendes machen :

Der Spieler (als First Person Kamera, keine echte 3D Figur) befindet sich innerhalb eines aus nur ca 3-5 Räumen bestehenden kleines Raumschiffes und soll sich da frei bewegen können. Natürlich soll der Spieler nicht durch den Boden fallen, nicht durch Wände oder Objekte gehen können, nur durch Türen - alles was in einem FPS selbstverständlich ist.

Das wäre noch nicht der Rede Wert.

Die Schwierigkeit liegt daran, daß sich das alles (Spieler, Raumschiff-Innere) sich im Weltraum bewegen soll. Das soll sich in die "Makro-Welt" voll integrieren.
Der Spieler soll also wenn er Lust hat sein eigenes Raumschiff zu erkunden das Cockpit verlassen können.

In Star Wars Galaxies ist dieses Feature drin, ich habe das ein Mal kurz gesehen. Hier ist ein Beispiel Video wie das aussehen soll :
http://www.youtube.com/watch?v...re=related


Die Frage ist, ob das in Blitz Basic 3D überhaupt geht, ob die Collision-Möglichkeiten das grundsätzlich erlauben oder nicht.

Ich glaube es irgendwo gelesen zu haben, daß in Blitz3D nur Kugel zu Kugel Kollision richtig erkannt wird, wenn sich beide kollidierenden Objekte bewegen. Wenn das so sein soll, dann wird das was ich machen möchte wohl nicht gehen.
Die Raumschiff Innenwände, der Boden, die Objekte müssen Polygon Collision (oder zu mindest Box Collision) haben, mit Kugeln geht das nicht.

Dann gebe es noch die unschöne Möglichkeit, das Herumlaufen im Raumschiff nur dann zu erlauben, wenn das Schiff steht oder gar andockt. Dann wäre das Raumschiff Innere mit Polygon Collision als "Scene" fest stehend drin.

Weiß jemand, ob was ich machen möchte in Blitz Basic geht oder nicht ?

ToeB

BeitragSa, Mai 01, 2010 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd ja nicht das raumschiff bewegen, sondern still dort stehen lassen, und solange der Spieler im Raumschiff ist bwegt sich nur die Skybox (oder was auch immer), so damit es aussieht als ob sich das Raumschiff bewegt. Setzt der Spieler sich ins Raumschiff, machst du es so, das erst eine Luke geööfnet werden muss, damit man den übergang nicht sieht, setzt das raumschiff an eine Position an der es jetzt seien sollte, öffnest die luke, spielst deine start animation ab und wenn das Schiff darußen ist dann kannst du das wieder bewegen (falls ich das so richtig verstanden habe)
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

tft

BeitragSa, Mai 01, 2010 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

es gibt keinen Grund das das nicht funktionieren soll. Ich verstehe auch irgendwie nicht dein Problem. Du must nur die kollisions Erkennung etwas Komplexer aufbauen. Erst die Bewegung im Schiff und die Positionen Festhalten. Dann die bewegung aussen.

Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

ToeB

BeitragSa, Mai 01, 2010 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein es geht um die Kollision von Blitz3D, und die funzt nur mit einer "non static - static" Kollsion, also ein bewegliches mit einem Festem Objekt.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Chrise

BeitragSa, Mai 01, 2010 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Frage ist, ob die Kollision von B3D sofort nicht mehr ausgeführt wird, wenn für das statische Objekt der Move/Translate/Turn befehl ausgeführt wird...?

Vielleicht das ganze System an ein Pivot heften, sodass sich der Spieler nur relativ zum Raumschiff bewegen kann. Wäre vielleicht eine Idee, weiß aber nicht ob das BB akzeptiert wird...

lg Chrise
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

mpmxyz

BeitragSa, Mai 01, 2010 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte zur Lösung des Problems einen unsichtbaren Dummy des Raumschiffes und einen des darin stehenden Spielers erstellen.
Der Raumschiff-Dummy bleibt stehen und die Bewegungen des Spieler-Dummies werden auf den Spieler übertragen. Es gibt nur zwischen diesen beiden Objekten eine Kollision.
-> Problem gelöst! Smile

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Fredko

BeitragSa, Mai 01, 2010 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das "Problem" lässt sich relativ simpel "überlisten":
Zuerst bewegst man alle Objekte wie normal, allerdings bloß alles was im Schritt der "im Raumschiff" Kollision "statisch" sein soll (z.B. das Raumschiff).
Nun wird einfach UpdateWorld ausgeführt.
Jetzt bewegen sich die Objekte im Raumschiff. Das Raumschiff ist technisch bereits bewegt und geupdatet worden, somit ist es im Moment statisch.
Auch jetzt wird wieder UpdateWorld ausgeführt.

Damit hat man nun alles bewegt und alles ist auch sinngemäß kollidiert. Allerdings sollten die Objekte im Raumschiff Children vom Raumschiff sein!
!

Chrise

BeitragSa, Mai 01, 2010 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Gute Idee Fredko!

Damit das ganze aber dann auch richtig gut funktioniert, sollte man für animierte Objekte aber dann genau die halbe Animationsgeschwindigkeit nehmen, da sonst alles doppelt so schnell (durch 2 Updateworlds) animiert werden würde. Wink
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Xeres

Moderator

BeitragSa, Mai 01, 2010 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei so einem Feature würde ich Überlegen, wie der Aufwand im Verhältnis zum Effekt steht.
Wie oft wird man durch das Schiffsinnere gehen? Muss man gehen, oder kann man man diesen Punkt überspringen um das selbe ziel zu erreichen? Werden Spieler "gezwungen" Wege zurück zu legen, die den Spielfluss zwangsweise unterbrechen?
Eine tiefe Welt macht nicht in jedem Fall spielerisch Sinn.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Omenaton_2

BeitragSo, Mai 02, 2010 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Ideen.

Ich überlege es mir wie ich das machen werde.
Ich bin mir nicht sicher, ob ich dieses Feature einbauen werde, weil dies eine Menge zusätzliche Arbeitsaufwand bedeutet und ich möchte den Code auch nicht zu sehr komplizieren.
Die KI ist fertig, Kollisionen und der restliche Game Mechanik (bis auf Quests und Talente) funktionieren auch. Ich möchte nicht gerne diese funktionierende Konstrukt mit dem Raumschiffinneren-Feature durcheinander bringen.

Anderseits ist dieses Feature ein sehr alter Wunsch von mir.

Ich werde deswegen erstmal ein ganz einfaches Test machen mit primitivsten Test-Grafiken. Dann schauen wie es sich anfühlt, wie das läuft und dann entscheiden ob ich das dann richtig mache oder nicht.
Sollte sich während ich an dem Test arbeite heraustellen, daß das zu aufwendig oder sonstwie hinderlich ist, höre ich damit sofort auf.

Wenn ich damit fertig bin, sag ich es Bescheid welche Methode ich verwendet habe.

Chrise

BeitragSo, Mai 02, 2010 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mich jetzt mal hingesetzt und dir was gebaut, damit sollte es so funktionieren, wie du das wolltest.
Das meiste vom Code ist eigentlich nur unnötigiger Schnickschnak, wie beispielsweise:

Planes um Größe und Orientierung des Raumes darzustellen
Typ der springen kann (mit Enter)
Typ der vom Raumschiff komplett abspringen kann (mit Space)
Einfachste Geschwindikeits und Rotationsberechnungen (dies eigentlich ned bringen XD)

Have fun! Wink

BlitzBasic: [AUSKLAPPEN]

SeedRnd MilliSecs()
Graphics3D 1024,768,0,2

Local Camera=CreateCamera()
Local Light=CreateLight()
RotateEntity Light,40,80,10
PositionEntity Camera,2,6,-13

Local SpaceshipPivot=CreatePivot()
Local Spaceship=CreateCube(SpaceshipPivot)
ScaleMesh Spaceship,4,0.5,4

Local SpaceShipBarrier=CreateCube(SpaceshipPivot)
RotateMesh SpaceShipBarrier,Rnd(0,360),Rnd(0,360),Rnd(0,360)
ScaleMesh SpaceShipBarrier,Rnd(0.5,4),Rnd(0.5,4),Rnd(0.5,4)
EntityColor SpaceShipBarrier,64,64,64
EntityType SpaceShipBarrier,2;WICHTIG

Local StarMan=CreateCube(SpaceshipPivot)
ScaleMesh StarMan,0.25,0.25,0.25
EntityColor StarMan,0,0,255
PositionEntity StarMan,0,1,-5
EntityType StarMan,1;WICHTIG
EntityRadius StarMan,0.25

;"Gravitation relativ zum Raumschiff und gesamt Beschleunigung ausserhalb des Systems)
;STARMAN
Local StarMX#,StarMY#,StarMZ#
Local StarMRX#,StarMRY#,StarMRZ#
Local StarManXO#,StarManYO#,StarManZO#
Local StarManRXO#,StarManRYO#,StarManRZO#
Local Absprung=False
Collisions 1,2,2,3;WICHTIG

;RAUMSCHIFF
Local SpeedX#,SpeedY#,SpeedZ#
Local RotX#,RotY#,RotZ#
SpeedX=Rnd(-0.01,0.01)
SpeedY=Rnd(-0.01,0.01)
SpeedZ=Rnd(-0.01,0.01)
RotX=Rnd(-0.1,0.1)
RotY=Rnd(-0.1,0.1)
RotZ=Rnd(-0.1,0.1)

EntityParent Camera,SpaceshipPivot

;NUR-UM-DIE-GRÖSSE-DES-RAUMES-ZU_VERMITTELN
Local SpaceSize=50
Local Spacetex=CreateTexture(64,64):ScaleTexture Spacetex,2,2
SetBuffer TextureBuffer(Spacetex)
Rect 0,0,32,32,1
Rect 32,32,32,32,1
Local Plane1=CreatePlane():EntityTexture Plane1,Spacetex:PositionEntity Plane1,0,-SpaceSize,0:RotateEntity Plane1,0,0,0
Local Plane2=CreatePlane():EntityTexture Plane2,Spacetex:PositionEntity Plane2,0,+SpaceSize,0:RotateEntity Plane2,0,0,180
Local Plane3=CreatePlane():EntityTexture Plane3,Spacetex:PositionEntity Plane3,-SpaceSize,0,0:RotateEntity Plane3,0,0,-90
Local Plane4=CreatePlane():EntityTexture Plane4,Spacetex:PositionEntity Plane4,+SpaceSize,0,0:RotateEntity Plane4,0,0,+90
Local Plane5=CreatePlane():EntityTexture Plane5,Spacetex:PositionEntity Plane5,0,0,-SpaceSize:RotateEntity Plane5,+90,0,0
Local Plane6=CreatePlane():EntityTexture Plane6,Spacetex:PositionEntity Plane6,0,0,+SpaceSize:RotateEntity Plane6,-90,0,0

SetBuffer BackBuffer()
Local Timer=CreateTimer(60)
While Not KeyHit(1)
If Absprung=False Then
If KeyHit(28) Then StarMY#=0.05
If EntityY(StarMan)>1 Then
StarMY#=StarMY#-0.001
Else
StarMY#=0
EndIf
EndIf

TranslateEntity SpaceshipPivot,SpeedX,SpeedY,SpeedZ
TurnEntity SpaceshipPivot,RotX,RotY,RotZ

Collisions 0,0,1,1
UpdateWorld 0

If Absprung=False Then
MoveEntity StarMan,0,StarMY#,0
If KeyDown(200) Then MoveEntity StarMan,0,0,+0.05
If KeyDown(208) Then MoveEntity StarMan,0,0,-0.05
If KeyDown(203) Then TurnEntity StarMan,0,+5,0
If KeyDown(205) Then TurnEntity StarMan,0,-5,0
If EntityY(StarMan)<0 Then TranslateEntity StarMan,0,-EntityY(StarMan),0
Else
TranslateEntity StarMan,StarMX,StarMY,StarMZ
TurnEntity StarMan,StarMRX,StarMRY,StarMRZ
EndIf

If KeyHit(57) Then
If Absprung=False Then
MoveEntity StarMan,0,StarMY#,0
EntityParent StarMan,0
;GESCHWINDIGKEIT-BERECHNEN
StarMX=EntityX(StarMan,1)-StarManXO+Rnd(-0.01,+0.01)
StarMY=EntityY(StarMan,1)-StarManYO+Rnd(-0.01,+0.01)
StarMZ=EntityZ(StarMan,1)-StarManZO+Rnd(-0.01,+0.01)
StarMRX=EntityPitch(StarMan,1)-StarManRXO+Rnd(-0.1,+0.1)
StarMRY=EntityYaw(StarMan,1)-StarManRYO+Rnd(-0.1,+0.1)
StarMRZ=EntityRoll(StarMan,1)-StarManRZO+Rnd(-0.1,+0.1)

EntityParent Camera,StarMan
Absprung=True
EndIf
EndIf

;GESAMT-BESCHLEUNIGUNG-FALLS-ABSPRUNG
StarManXO=EntityX(StarMan,1)
StarManYO=EntityY(StarMan,1)
StarManZO=EntityZ(StarMan,1)
StarManRXO=EntityPitch(StarMan,1)
StarManRYO=EntityYaw(StarMan,1)
StarManRZO=EntityRoll(StarMan,1)

Collisions 1,2,2,3;WICHTIG
UpdateWorld

RenderWorld
WaitTimer Timer
Flip 0
Wend
End
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

Omenaton_2

BeitragSo, Mai 02, 2010 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe jetzt mein Test-Raumschiffinnenmodell drin.

Wie sich mein Test zeigt, meine ursprüngliche Befürchtung, daß bei BB3D nur Sphere to Sphere Collision richtig funktioniert wenn sich beide kollidierenden Objekten bewegen, war gerechtfertigt.

So lange mein Schiff steht, kann ich schön darin herumlaufen, durch die Fenster die lebendige Außenwelt betrachten UND ich kollidiere schön fest mit der Wand. Alles in Ordnung.

Sobald das Schiff durch den Raum fliegt, funktioniert die Kollision gegen die Schiffswände nur noch ungenügend bis gar nicht.

Das war aber keine Überraschung, ist aber gut das in der Praxis zu sehen.

Ich habe beschlossen, zu erst die Methode die Fredko beschrieben hatte anzuwenden, um das beschriebene Problem zu umgehen. (Das schien am Einfachsten zu sein.) Also erstmal die ganze bisherige Welt plus die neue Raumschiffinnenarchitektur zu bewegen.
Dann UpdateWorld machen.

Dann springe ich zu der Bewegung der neuen Spielfigur Kamera, also das Herumlaufen.
Danach mache ich nochmal UpdateWorld und dann kommt RenderWorld.

Das hilft aber irgendwie nicht. Während des Fluges kolliediere ich nicht mehr richtig mit den Schiffswänden.

Dieses Feature wird aber irgendwie reinkommen, weil es schon jetzt ein ziemlich tolles Gefühl ist.

Die Idee von Mpmxyz mit dem Stehenden Schiff und sein fliegendes Dummy ist auch interessant, darüber werde ich morgen noch ausführlicher nachdenken.

Chrisse, vielen Dank für deinen Code Beispiel.
Leider kann ich das so nicht aus dieser Seite rauskopieren und in BlitzBasic richtig einfügen, weil der Code in diesem "Code Modus" kein einfacher Text ist, sondern zusätzliche Informationen hat. Deshalb kann ich das nicht ausprobieren.
Hast du das getestet ? Funktioniert das wirklich wie es soll ?
Während das Schiff fliegt, kann das Schiffskörper mit Hindernissen im Weltraum kollidieren ? Kann man dabei mit Spielfigur herumlaufen und gegen die Schiffswände kollidieren ? Zuverlässig ? Das Wort zuiverlässig ist hier wichtig, weil wenn Collisionen nicht richtig funktionieren, dann klappen sie hin und wieder trotzdem, nur nicht immer und nicht permanent.
Und bedenke, daß während die Figur im Schiff herumläuft, müssen noch alle andern Arten von Kollisionen störungsfrei laufen. Da bekämpfen sich KI gesteuerte Raumschiffe, fliegen herum, kollidieren miteinander oder mit der Umgebung, etc.

Mich irritiert, daß du in deinem Code doppelt den Befehl Collisions verwendest und zwar am Anfang mit 0,0, beginnend.
Nach meinem Verständnis wird Collisions nur ein Mal am Anfang eines Programmes definiert. Und was soll Collisions mit 0,0 bewirken ?

Ich übernehme aber auch grundsätzlich niemals Code Teile von anderen Personen, aus Prinzip nicht. Es ginge nur um das Austesten ob die Methode auch richtig funktioniert.

Morgen überlege ich es mir weiter. Irgendwie wird das schon klappen und es lohnt sich, weil es sich gut anfühlt, das weiß ich jetzt.

Chrise

BeitragSo, Mai 02, 2010 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
zietiere meine Nachricht doch und kopiere den Code aus dem Beitrags-bearbeitungs-fenster Wink

Ich habe mich jetzt vorallemd arauf konzentriert, dass sich das Raumschiff bewegen kann und trotzdem der Spieler (nach meinen Tests völlig zuverlässig) mit den "Wänden" kollidieren kann.
Dass das Raumschiff mit anderen Objekten kollidieren kann hab ich in meinem Beispiel jetzt nicht aufgeführt, sollte aber genauso möglich sein.

Collisions 0,0 habe ich angewandt, damit zwar die Welt geupdatet wird, da es aber keine Objekte mit Type 0 gibt, der Rechenaufwand ziemlich auf 0 bleibt.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

Omenaton_2

BeitragMo, Mai 03, 2010 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@Chrise

Nun, leider wie ich das schon in meinem vorherigen Posting geschrieben habe, klappt das bei mir nach der Methode 2 x UpdateWorld irgendwie nicht.

Ich habe auch deinen Beispielcode ausprobiert. Das geht wirklich. Ich habe in meinem Code das auch drin. Im Prinzip das Selbe (nur mit sehr, sehr viel Inhalt dazwischen), geht aber trotzdem nicht.

An deinem Beispielcode habe ich aber etwas sehr Komisches entdeckt. Da stimmt was nicht.
Wenn ich diese 2 Zeilen auskommentiere :

Collisions 0,0,1,1
UpdateWorld 0

Dann dürfte die Kollision nicht mehr erkannt werden.
Überraschender weise wird die Kollision doch erkannt. Es funktioniert genauso mit nur 1 UpdateWorld wie mit 2.

Ich gucke mir das noch ein wenig weiter an, aber wenn das so nicht klappt, dann werde ich wahrscheinlich die Projektionsmethode verwenden, mit einem 2 Raumschiff, das steht, unsichtbar ist und nur aus Kollisionsobjekten besteht. Die Bewegungen der Figur und die Kollisionen werden von dort aus auf das sichtbare, bunte, bewegliche Schiff mit Kamera in der Welt übertragen.

Chrise

BeitragMo, Mai 03, 2010 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Omenaton_2 hat Folgendes geschrieben:

Wenn ich diese 2 Zeilen auskommentiere :

Collisions 0,0,1,1
UpdateWorld 0

Dann dürfte die Kollision nicht mehr erkannt werden.
Überraschender weise wird die Kollision doch erkannt. Es funktioniert genauso mit nur 1 UpdateWorld wie mit 2.


Das dachte ich Anfangs auch, allerdings wird die Kollision bei bestimmten Drehwinkeln dann nicht mehr richtig erkannt und der Spieler bewegt sich doch hin und wieder durch das Objekt hindurch. Aber eben nur bei ganz bestimmten stellen (größeren Triangles hatte ich vorallem festgestellt)
Ich würde es vorsichtshalber drinnenlassen, sicher sit sicher und zusätzlich berechnet (ausser vll Objekt positionen) sollte da nicht werden. Wink

Schon Objekt-typen überprüft? Collisionstypen überprüft? Mal den großen Zwischenteil rausgenommen bzw. woanders hingesetzt?
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

Omenaton_2

BeitragMo, Mai 03, 2010 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich habe in dein Beispielcode einen Mesh aus dem Raumschiffinneren an der Stelle des Cubes als Hindernis eingeladen und wenn nur 1 Mal UpdateWorld gemacht wird, funktioniert die Collision nur noch an und zu, wie du auch geschrieben hast. Sonst ist auch mit Mesh alles in Ordnung. Daran liegt es also auch nicht.

Was meinst du mit Objekt-Typen überprüft ? EntityType ? Klar habe ich das überprüft und Collisions stimmen auch.
Du mußt bedenken, daß so lange das Raumschiff steht, funktioniert die Kollision perfekt. Das beweist, daß die Collisionstypen und Entitytypes richtig gesetzt sind, sonst ginge das nicht.

Ein Unterschied zu deinem Code ist, daß bei mir (vorläufig) die Camera an Sich kollidiert und nicht ein Figur-Objekt. Das kann aber nicht der Grund der sein.

Ich habe auch alles aus meine Haupt Spiel Loop auskommentiert, ich springe fast nichts mehr an, außer die paar Rutinen die zum Flug des Raumschiffes notwendig sind, das hilft aber auch nicht.

Mein Schiff befindet sich weit weg von Nullpunkt des Koordinatensystems, so bei Z=82000. Deins ist nahe Null Punkt. Ich habe dein Beispiel auch auf 82000 geschoben , geht aber auch. Die zu große Entfernung von Nullpunkt kann angeblich zu gelegentlichen Kollisionsfehlern führen.

Ich könnte auch noch eine andere Methode anwenden. Einfach Line of Sight checken. Von der Kamera ausgehend in einem relativ dicken Strahl auf ca 20-30 cm vorausschauen und nur wenn nichts im Weg ist die durch Tastendruck angeforderte Bewegung ausführen, sonst stop.
Das werde ich glaube ich gleich testen, weil ich die Line of Sight Check Rutine schon lange drin habe.

Nachtrag :
Ich habe noch eine Beobachtung gemacht. Wenn ich in die Flugrichtung laufe und so durch eine Wand gehen will, geht es nur sehr schwer. Seitwärts ab und zu. Wenn ich entgegen der Flugrichtung (also am Ende des Schiffes) "aussteigen" versuche, dann geht das sehr einfach. Da funktioniert die Kollision gar nicht. (Wenn ich dann durch die Hinterwand wieder einsteigen will, kann ich nicht, von Außen funktioniert die Kollisionsabfrage.)
Ich habe heute ein wenig in dem offiziellen BlitzResearch Forum nach Collision gesucht um Hinweise zu finden. Dabei habe ich mehrmals etwas über ein bekanntes Problem bei 3D Platformspielen gelesen. Wenn sich 3D Platformen wie Lifts auf und Ab bewegen und der Spieler darauf spring, dann kann die Figur je nach dem ob der Platform auf oder ab fährt hindurchfallen. In meinem Fall kann auf die horizontale Ebene projoziert dieses "Moving Platform" Problem, eine Schwäche der Blitz3D Collision ins Spiel kommen.

Chrise

BeitragMo, Mai 03, 2010 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
füge doch deine Kamera an einen Pivot und lass diesen Kollidieren Wink
Vll ist das ja ne Macke ^^
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

Omenaton_2

BeitragMo, Mai 03, 2010 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es ausprobiert die Kamera an einen Pivot zu hängen, aber das hilft auch nicht.

Macht nichts, ich habe 3 Alternativlösungswege.

Ich habe schon die "Line of Sight Check Methode" zum Vorwärtsgehen eingebaut und das klappt.
Beim Umdrehen kann man sich noch aus dem Schiff "schmuggel", das werde ich aber morgen angehen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group