Positionsbestimmung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: Positionsbestimmung

BeitragFr, Jul 16, 2010 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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
yaw# = udpStream.ReadFloat()
er2.z# = (er2.z#-yaw#)-5.0
udpStream.WriteFloat(er2.z#)

;Client
WriteByte svr,5
WriteFloat svr,EntityYaw(player)
SendUDPMsg svr,ip,8000


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

NightPhoenix

BeitragFr, Jul 16, 2010 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zukünftige Position anhand von Winkeln brechnen? Vektoren! Wink
Ausgangskoordinaten + Richtungsvektor (* Länge) = Neue Koordinaten

Ich bin mir sicher du findest genug darüber via google

N0X

BeitragFr, Jul 16, 2010 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, EntityYaw gibt einen Winkel zurück. Du musst mit Sin und Cos arbeiten.
Starfare: Worklog, Website (download)
 

Blitzjockey

BeitragFr, Jul 16, 2010 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist doch in Ordnung, wenn Du alles über Pivots realisierst. RenderWorld kannst Du sowieso komplett weglassen.
Starfare: Worklog, Website (download)

N0X

BeitragFr, Jul 16, 2010 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, darauf habe ich gar nicht geachtet. Mein Fehler.
Starfare: Worklog, Website (download)

biggicekey

BeitragFr, Jul 16, 2010 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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)
x# = x# + (Cos(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

BeitragFr, Jul 16, 2010 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 16, 2010 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Crying or Very sad

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%
 

Blitzjockey

BeitragSa, Jul 17, 2010 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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)
x# = x# - (Cos(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)
x# = x# + (Sin(EntityYaw(Player)) * 5.0)

Für "D" (rechts):
BlitzBasic: [AUSKLAPPEN]
z# = z# + (Cos(EntityYaw(Player)) * 5.0)
x# = x# - (Sin(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.. Wink Ansonsten müsste ich annehmen das Du Kühen zur Hause hällst, die sind aber sehr schwierig zu Steuern, da kommt man mit Sinus nicht viel weiter...


------ 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

BeitragSa, Jul 17, 2010 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, war nurnoch Achsenvertauscht, habe das geändert, funktioniert jetzt wunderbar!
Danke, danke, danke! Smile

//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. Rolling Eyes
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

BeitragSa, Jul 17, 2010 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche statt
(Sin(ReadFloat(udpStream)*5.0))
mal
(Sin(ReadFloat(udpStream))*5.0)?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group