'netzwerkcode' funktioniert nicht
Übersicht

fringoBetreff: 'netzwerkcode' funktioniert nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo leute, wer kann mir bei meinem netzwerk-code helfen (total newbie)?
ich versuche per udp x,y,z (position) und xrot,yrot,zrot (rotation) der spielfiguren zu übertragen. leider ist das ergebnis ziemlicher mist (die daten kommen nicht richtig an); was stimmt nicht? die daten meines spielers werden ermittelt... xs=TOKRB_GetX(Rbspieler(meinenr)) ys=TOKRB_GetY(Rbspieler(meinenr)) zs=TOKRB_GetZ(Rbspieler(meinenr)) xrots=TOKRB_GetPitch(RbSpieler(meinenr)) yrots=TOKRB_GetYaw(RbSpieler(meinenr)) zrots=TOKRB_GetRoll(RbSpieler(meinenr)) ..dann gesendet WriteByte stream, 1 ;-------------byte zum identifizieren WriteByte stream, xs WriteByte stream, 2 WriteByte stream, ys WriteByte stream, 3 WriteByte stream, zs WriteByte stream, 4 WriteByte stream, xrots WriteByte stream, 5 WriteByte stream, yrots WriteByte stream, 6 WriteByte stream, zrots SendUDPMsg stream,ip,sendeport ..und empfangen If RecvUDPMsg(stream)<>0 PosRot=ReadByte(stream) Select PosRot Case 1 xe=ReadByte(stream) Case 2 ye=ReadByte(stream) Case 3 ze=ReadByte(stream) Case 4 xrote=ReadByte(stream) Case 5 yrote=ReadByte(stream) Case 6 zrote=ReadByte(stream) End Select End If das was ankommt stimmt irgendwie nicht.. ![]() |
||
Shaggy82 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi, fringo
der teil deines codes müsste so aussehen. : Code: [AUSKLAPPEN] ; zum besseren lesen des netzwerk codes Const Position_update = 1 . . . . . . xs#=TOKRB_GetX(Rbspieler(meinenr)) ys#=TOKRB_GetY(Rbspieler(meinenr)) zs#=TOKRB_GetZ(Rbspieler(meinenr)) xrots#=TOKRB_GetPitch(RbSpieler(meinenr)) yrots#=TOKRB_GetYaw(RbSpieler(meinenr)) zrots#=TOKRB_GetRoll(RbSpieler(meinenr)) ..dann gesendet WriteInt stream, Position_update ;-------------byte zum identifizieren WriteFloat stream_out, xs WriteFloat stream_out, ys WriteFloat stream_out, zs WriteFloat stream_out, xrots WriteFloat stream_out, yrots WriteFloat stream_out, zrots SendUDPMsg stream_out,ip,sendeport ..und empfangen If RecvUDPMsg(stream_in) Then Command = ReadInt(stream_in) IP = UDPMsgIP(stream_in) Port = UDPMsgPort(stream_in) Select Command Select Position_update ;-------------byte zum identifizieren xe=ReadFloat(stream_in) ye=ReadFloat(stream_in) ze=ReadFloat(stream_in) xrote=ReadFloat(stream_in) yrote=ReadFloat(stream_in) zrote=ReadFloat(stream_in) End Select End If noch nen paar tips: -sende die positions updates nur wenn sich deine position oder einer deiner winkel sich verändert hat. -lege jeweils einen udp stream für den ein- und ausgang an. |
||
fringoBetreff: :: |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die tipps, Shaggy (bis auf den case-fehler :]). Problem: das zeug laggt schon im lan gewaltig - fast 1 sek ![]() |
||
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie oft sendest du das update der Position etc.?
Wenn man zu häufig die neuen Koordianten sendet kommt es zu einem Netzwerkstau der immer stärker anschwillt und zu gigantischen Latenzen führt. Man sollte max. 10 - 20 mal pro Sekunde (besser weniger) Pakete senden. Die Pakete sollten auch möglichst klein sein. Ein Byte oder ein Short sollten für die Winkelangaben reichen. Bei Positionsangaben kann man, jeh nachdem wie das Spiel aufgebaut ist auch auf einen Short zurück greifen. Was ist das denn für eine Spiel? Z.B. braucht man für einen Ego-Shooter fast nie den "Roll" des Spielers! Personen rotieren ja für gewöhnlich nicht um ihre Längstachse! |
||
fringoBetreff: :. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die tipps. "Personen rotieren ja für gewöhnlich nicht um ihre Längsachse" - naja, wenn sie ordentlich prügel bekommen schon ;]. nein, also es ist einfach ein kleines versuchprogrammerl mit tokamak - wollte sehen ob ich das ohne vorerfahrung im netzwerk hinbekomme.
die daten sende ich eigentliche immer. wenn ich dich richtig verstehe is das programm eigentlich zu schnell (stau). wie würdest du das auf 10-20x/sek limitieren? einfach mitzählern und dann stoppen? |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] If MilliSecs()-lastsend >= (1000/25) Then ;(1000/25) -> er sendet 25 mal in der sekunde So geht das xD |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group