UDP - Animation

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

N0X

Betreff: UDP - Animation

BeitragSo, Feb 01, 2009 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, Community !
Ich habe folgendes Problem:
Ich möchte eine Drehung (TurnEntity) per UDP versenden.
Habe schon viel versucht hat aber nichts genützt.

Hier der Codeausschnitt: Code: [AUSKLAPPEN]
Function UDP()
   

   readsvr = RecvUDPMsg(svr)
     If readsvr <> 0 Then
         readav = ReadAvail(svr)
        If readav <> 0 Then
            rbyte = ReadByte(svr)
            Select rbyte
               Case 1
                  ;con
                  p.Player = New Player
                  p\ip = ReadInt(svr)
                  p\port = ReadInt(svr)
                  p\model = clientp
               Case 2
                  ;dis
                  rIp = ReadInt(svr)
                  port = ReadInt(svr)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        FreeEntity p\model
                        Delete p
                     End If
                  Next
               Case 3
                  rIp = ReadInt(svr)
                  port = ReadInt(svr)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        p\x# = ReadFloat(svr)
                        p\y# = ReadFloat(svr)
                        p\z# = ReadFloat(svr)
                     End If
                  Next
            End Select
           
        End If
     End If
     read_milli = MilliSecs()+32

   For p.Player = Each Player
      PositionEntity p\model,p\x#,p\y#,p\z#
   Next
   ;Send
   If send_milli < MilliSecs() Then
      WriteByte svr,3
      WriteFloat svr,EntityX(player)
      WriteFloat svr,EntityY(player)
      WriteFloat svr,EntityZ(player)
     
      SendUDPMsg svr,Ip,7142
      send_milli = MilliSecs()+32
   End If
   
End Function


Mfg, N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%
  • Zuletzt bearbeitet von N0X am So, Feb 01, 2009 21:31, insgesamt einmal bearbeitet

TimBo

BeitragSo, Feb 01, 2009 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

mach beim Empfangen etwa sowas:
"while not eof(stream"

dann kannst du beim Senden sicher sein, dass der Stream leer ist.

Viele Grüße
TimBo

Edit: was funktioniert denn nicht, empfängst du falsche oder gar keine Daten ?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Holzchopf

Meisterpacker

BeitragSo, Feb 01, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du must einfach (genau so, wie dus auch mit den Positionen machst) immer absolute Angaben übertragen. Dann musst du natürlich den Player Type mit pitch-, yaw- und roll-Feldern ausstatten, diese auch übermitteln und dann kannst du einfach dort, wo du jeden absolut positionierst gleichzeitig auch noch absolut drehen.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

N0X

BeitragSo, Feb 01, 2009 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut hat funktioniert, danke!

Neues Problem:
Jetzt möchte ich das wenn eine Zahl sich verändert eine Animation abgespieolt wird (Problem liegt bei der Abfrage ob sich die Zahl verändert)
Wie mache ich eine solche Abfrage?

Hier Code: [AUSKLAPPEN]
   readsvr = RecvUDPMsg(svr)
     If readsvr <> 0 Then
         readav = ReadAvail(svr)
        If readav <> 0 Then
            rbyte = ReadByte(svr)
            Select rbyte
               Case 1
                  ;con
                  p.Player = New Player
                  p\ip = ReadInt(svr)
                  p\port = ReadInt(svr)
                  p\model = clientp
               Case 2
                  ;dis
                  rIp = ReadInt(svr)
                  port = ReadInt(svr)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        FreeEntity p\model
                        Delete p
                     End If
                  Next
               Case 3
                  rIp = ReadInt(svr)
                  port = ReadInt(svr)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        p\x# = ReadFloat(svr)
                        p\y# = ReadFloat(svr)
                        p\z# = ReadFloat(svr)
                  p\pitch = ReadInt(svr)
                  p\yaw   = ReadInt(svr)
                  p\roll  = ReadInt(svr)
                  p\active = ReadByte(svr)
                     End If
                  Next
            End Select
           
        End If
     End If
     read_milli = MilliSecs()+32

   For p.Player = Each Player
      PositionEntity p\model,p\x#,p\y#,p\z#
     RotateEntity p\model,p\pitch,p\yaw,p\roll
     If p\active=1 Then
       If Not Animating(clientp) Then
        Animate clientp,1,.2,1,1
        EndIf
     EndIf
     If p\active=0 Then
       Animate player,0
      EndIf
   Next

   If send_milli < MilliSecs() Then
      WriteByte svr,3
      WriteFloat svr,EntityX(player)
      WriteFloat svr,EntityY(player)
      WriteFloat svr,EntityZ(player)
      WriteInt svr,pitch
     WriteInt svr,yaw
     WriteInt svr,roll
     WriteByte svr,active
      SendUDPMsg svr,Ip,7142
      send_milli = MilliSecs()+32
   End If

   If KeyDown(17) Then
      MoveEntity player,0,0,1 : pz=pz+1 : move2=1
      MoveEntity skybox,0,0,1
      If Not Animating(player) Then
         Animate player,1,.2,1,1
         active=1
      EndIf
   EndIf
   
   If KeyDown(31) Then
      MoveEntity player,0,0,-1 : pz=pz-1 : move2=-1
      MoveEntity skybox,0,0,-1
      If Not Animating(player) Then
         Animate player,1,-0.2,1,1
         active=1
      EndIf
   EndIf
   
   If KeyDown(57) And pVy = 0 Then pVy = 3.5
   
   If Not (KeyDown(17) Or KeyDown(31) Or KeyDown(57)) Then
      Animate player,0
      active=0
      ;SetAnimTime player,0
   EndIf


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

ozzi789

BeitragMo, Feb 02, 2009 9:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Client schickt sein Wert, dein "Server" vergleicht sie und antwortet.
Stell dir einfach vor das wären 2 Personen, dann gehts gleich einfacher Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group