Kollisionsmöglichkeiten wenn sich alles bewegen kann
Übersicht

Omenaton_2Betreff: Kollisionsmöglichkeiten wenn sich alles bewegen kann |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Fredko |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() Damit hat man nun alles bewegt und alles ist auch sinngemäß kollidiert. Allerdings sollten die Objekte im Raumschiff Children vom Raumschiff sein! |
||
! |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() BlitzBasic: [AUSKLAPPEN]
|
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
zietiere meine Nachricht doch und kopiere den Code aus dem Beitrags-bearbeitungs-fenster ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
füge doch deine Kamera an einen Pivot und lass diesen Kollidieren ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group