Positionsbestimmung
Übersicht

![]() |
N0XBetreff: Positionsbestimmung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
Mir ist leider kein besserer Thread-Titel eingefallen. Ich möchte anhand der Richtung und des EntityYaw() Rückgabewertes die Position meines Players neu bestimmen. Also... Mein Spieler sendet meinem Server in welche Richtung er geht. (Das tut er anhand eines Bytes.) Es soll aber jetzt noch mit dem EntityYaw()-Wert des Spielers (also die Drehung) ähm, die Richtung genauer bestimmt werden. Ich hoffe ihr wisst was ich meine... Wie mache ich das? Ansatz: BlitzBasic: [AUSKLAPPEN] ;Server Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zukünftige Position anhand von Winkeln brechnen? Vektoren! ![]() Ausgangskoordinaten + Richtungsvektor (* Länge) = Neue Koordinaten Ich bin mir sicher du findest genug darüber via google |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, aber dann müsste das doch schon funktionieren oder?
Bei Tastendruck "W" (17): BlitzBasic: [AUSKLAPPEN] z# = (z#+EntityYaw(player))+5.0 Bei Tastendruck "A" (30): BlitzBasic: [AUSKLAPPEN] x# = (x#+EntityYaw(player))-5.0 Bei Tastendruck "S" (31): BlitzBasic: [AUSKLAPPEN] z# = (z#+EntityYaw(player))-5.0 Bei Tastendruck "D" (32): BlitzBasic: [AUSKLAPPEN] x# = (x#+EntityYaw(player))+5.0 Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, EntityYaw gibt einen Winkel zurück. Du musst mit Sin![]() ![]() |
||
Starfare: Worklog, Website (download) |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielleicht verstehe ich es komplett falsch, aber kannst Du nicht einfach mittels
BlitzBasic: [AUSKLAPPEN] MoveEntity Player, 0, 0, 5.0 Dein Objekt immer "vorwärts" bewegen? Für Seitwärts gehen (A, D) BlitzBasic: [AUSKLAPPEN] MoveEntity Player, 5.0, 0, 0 Solltest Du es komplett anders meinen, wäre ich aber neugierig wie Du es dann haben möchtest. |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eben leider nicht, da mein Server komplett ohne Grafische Dinge und Bewegungen arbeitet. Er soll ganz auf mathematische Rechnungen basieren.
(Obwohl ich gerade mit dem Gedanken spiele, es doch mit MoveEntity zu machen...) Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist doch in Ordnung, wenn Du alles über Pivots realisierst. RenderWorld kannst Du sowieso komplett weglassen. | ||
Starfare: Worklog, Website (download) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, aber wie mache ich Pivot's in BMax?
Was muss ich dafür alles Importen? (Kann gerne in die BMax Ecke geschoben werden) Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, darauf habe ich gar nicht geachtet. Mein Fehler. | ||
Starfare: Worklog, Website (download) |
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
in deinem worklog steht das hättest du schon fertig implementiert... | ||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kenne mich zwar mit BMax noch Server gut aus. Und verstehen warum Du EntityYaw benutzten kannst, MoveEntity aber nicht, tue ich auch nicht. handelt sich doch in beide Fälle um das gleiche Objekt?
Aber mathematisch gesehen: BlitzBasic: [AUSKLAPPEN] z# = z# + (Sin(EntityYaw(Player)) * 5.0) Dabei ist z,x der Position, Sin(EntityYaw(Player)) liefert den aktuelle Richtung und 5.0 ist der Geschwindigkeit. Wenn Du das so machen möchtest, müsstest Du schon beachten das Du immer den z# und der x#-wert änderst, es sei denn, bewegung ist nur in den 4 Hauptrichtungen möglich. Dann bringt aber EntityYaw ohnehin gar nichts. Aber, bezogen auf Dein erste Post: Du redest hier von Richtung und EntityYaw. Das ist aber eigentlich genau das gleiche. Es sei denn, Du meinst mit Richtung "vorwärts, Rückwärts, zur Seite?" Dass wäre dann nur den Bedienungsrichtung, weniger aber der Richtung vom Objekt. Darum würde ich das nicht Richtung nennen, da das bezogen auf EntityYaw nur verwirrung stiftet. |
||
- Zuletzt bearbeitet von Blitzjockey am Fr, Jul 16, 2010 22:24, insgesamt einmal bearbeitet
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das hatte ich in meinem Worklog geschrieben, die reine Übertragung der Positionen ist auch fertig, jedoch gehen nur Positionen auf der x-, ODER der z-Achse. Eben weil ich nur die Richtung auf Tastendruck an den Server gesendet habe und dieser dann eben die neuen Koordinaten ausgerechnet hat.
Und ja, ich könnte jetzt auch MoveEntity benutzen... stimmt schon... @blitzjockey: Danke! Mfg, N0X //EDIT: Gerade gemerkt: Für Pivot's etc. bräuchte ich ja wieder ein Framework wie MiniB3D o.Ä. Oder gibts da noch irgendetwas anderes Modellartiges wofür man kein Framework zu integrieren braucht? |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber Dein Zwerg möchte doch auch kreuz und quer durch dem Welt laufen, oder?
Wie löst Du das jetzt, wenn Du nur X oder Z-werten änderst? Eine diagonale Bewegung ist ja immer eine bewegung wobei gleichzeitig x und z angepasst werden.. |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, dann muss ich das irgendwie anders lösen.
Vielleicht nur den EntityYaw Wert übergeben? Und dann prüfen ob der im positiven oder negativen Bereich ist, woraufhin dann eben addiert oder subtrahiert wird. Ich möchte aber auf keinen Fall auf die direkte Positionsübertragung des Spielers zum Server zurückgreifen müssen, da mir das viel zu unsicher ist. (Total frei zum hacken...) Würde das funktionieren? Mfg, N0X //EDIT: Das funktioniert auch nicht... Hm, habe vorerst die Richtungsvariable (nein, nicht EntityYaw!) gelöscht. Ich dachte die beiden Rechnungen (die von x# und z#) können immer gerechnet werden, egal wie der Spieler sich bewegt. Aber irgendwie kommt da nur mist bei raus... Warum? ![]() Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tja, ich habe hier nur wenig informationen zur Verfügung...
Erstens gehe ich dabei davon aus dass eine bewegung richtung "Norden" (kurs 0°) eine maximale Komponente auf der X-axis hat, und eine 0-komponente auf der z-axis. Den beide Formeln (für z und x) sind in mein Beispiel nur für den Vorwärtsbewegung geeignet. Bei rückwärtsbewegung musst Du zb. nicht addieren, sondern subtrahieren. (x und z) Rückwärts: BlitzBasic: [AUSKLAPPEN] z# = z# - (Sin(EntityYaw(Player)) * 5.0) Bei eine Bewegung zur Seite werden Sin und Cos umgedreht. Für "A" (links): BlitzBasic: [AUSKLAPPEN] z# = z# - (Cos(EntityYaw(Player)) * 5.0) Für "D" (rechts): BlitzBasic: [AUSKLAPPEN] z# = z# + (Cos(EntityYaw(Player)) * 5.0) Ich hab's zwar nicht getestet, müsste so aber stimmen. Wenn Du ein etwas genauere Beschreibung von "Da kommt nur Mist bei raus" geben könnte, können wir auch mehr dazu sagen.. ![]() ------ EDIT ------ Zusätlich habe ich die Eindruck, Du möchtest auf den Server den Richtung Deines Zwerges speichern, nicht aber seine Position. Die möchtest Du Lokal (auf der Rechner des Benutzers speichern?) Das geht zwar, wird aber bei mehrere Rechner das Problem geben das die andere Rechner nicht genau wissen wo Dein Zwerg sich befindet - sie wissen nur in welche Richtung er schaut, nicht aber wie weit er schon gelaufen ist? Oder warum möchtest Du ein Server benutzen? |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, war nurnoch Achsenvertauscht, habe das geändert, funktioniert jetzt wunderbar!
Danke, danke, danke! ![]() //ALT: Hm, klappt immer noch nicht, naja dann greif ich wohl auf die direkte Positionsübertragung zurück... @blitzjockey: Nein, nein, ich speichere natürlich die Position auf dem Server, nicht auf dem Client! Diese Rechnungen laufen alle auf dem Server ab, danach wird die neue Position dann zum Clienten gesendet. Ich habe nur "EntityYaw(player)" anstatt "x# = x# + (Sin(ReadFloat(udpStream)*5.0))" geschrieben, einfach zum besseren Verständnis. ![]() Der Spieler schickt momentan nur seine Richtung an den Server, mehr nicht. Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
- Zuletzt bearbeitet von N0X am Sa, Jul 17, 2010 13:59, insgesamt einmal bearbeitet
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Versuche statt
(Sin(ReadFloat(udpStream)*5.0)) mal (Sin(ReadFloat(udpStream))*5.0)? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group