Warum springen die player hin und her?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mas93

Betreff: Warum springen die player hin und her?

BeitragMo, Jun 11, 2007 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich hab jetzt ein udp tutorial gefunden und das mal erweitert.
Nur springen jetzt die Spielerbildchen hin und her.

Ich denke das es an dem typ liegt, weil ich ihm wild einfach koordinaten zuwerfe, ohne das ich ihm sag welcher spieler es ist.

Wie kann ich das problem lösen??

Ich paste hier mal beide codes:

server:
Code: [AUSKLAPPEN]

;Type wo die Clients mit ip,port und name drin gespeichert werden
Type client
Field name$
Field ip,port
End Type

port = 7142 ;Serverport
udp = CreateUDPStream(port) ;UDP Stream auf port 7142 erstellen

;Wenn der Stream nicht steht Fehlermeldung ausgeben und beenden
If Not udp Then
  Print "Der UDP Stream konnte nicht erstellt werden."
  End
EndIf

Print "Server gestartet."

Repeat

  If RecvUDPMsg(udp) <> 0  ;Wenn eine UDP Message eingegangen ist.
    client_ip = UDPMsgIP(udp)  ;IP des Absenders
    client_port = UDPMsgPort(udp) ;Port des Absenders

    message = ReadByte(udp)  ;Anhand von diesem Byte erkennt der Server was der Client will

    Select message
      ;1 = Chatmessage
      Case 1
        name$ = ReadString(udp) ;Wer sendet eine Chatmessage
        x = ReadByte(udp) ;Der Inhalt der Chatmessage
        y = ReadByte(udp)

        ;Nachricht an alle anderen Teilnehmer weitersenden
        For c.client = Each client  ;Jeden Client durchgehen
          If Not c\name$ = name$  ;Wenn es nicht der Client ist der gerade gesendet hat
            WriteByte(udp,1)  ;Nachrichtentyp 1 senden = Chatmessage
            WriteString(udp,name$) ;Name weiterleiten
            WriteByte(udp,x) ;Inhalt weiterleiten
            WriteByte(udp,y)
            SendUDPMsg udp,c\ip,c\port  ;UDP Message absenden
          EndIf
        Next

      ;Neuer Client ist dem Chat beigetreten
      Case 2
        name$ = ReadString(udp)  ;Name des Clients lesen
        c.client = New client  ;Neues client objekt erstellen
        c\ip = client_ip  ;Ip speichern
        c\port = client_port ;Port speichern
        c\name$ = name$  ;Name speichern

        ;Servernachricht ausgeben
        Print name$ + " ist dem Chat beigetreten."
       
        ;Allen anderen Clients bescheid sagen das ein neuer da ist.
        For c2.client = Each client
          If Not c2 = c
            WriteByte(udp,2)  ;Nachrichtentyp 2 senden = Client beigetreten
            WriteString(udp,name$)  ;Name weiterleiten
            SendUDPMsg udp,c2\ip,c2\port  ;UDP Message senden
          EndIf
        Next

      ;Client hat die Verbindung getrennt
      Case 3
        name$ = ReadString(udp) ;Clientname auslesen

        ;Client löschen und allen anderen Clients mitteilen
        For c.client = Each client
          If c\name$ = name$
            Delete c  ;Den Client löschen der die Nachricht gesendet hat
          Else
            WriteByte(udp,3)  ;Den anderen sagen das ein Client weg geht.
            WriteString(udp,name$) ;Name weiterleiten
            SendUDPMsg udp,c\ip,c\port ;UDP Message senden
          EndIf
        Next
 
        ;Servernachricht ausgeben
        Print name$ + " hat den Chat verlassen."

    End Select

  EndIf

Until KeyHit(1)

CloseUDPStream(udp) ;UDP Stream schliessen

End


client:
Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

;Type der die clients speichert
Type client
Field name$
Field x
Field y
Field life
End Type

spieler=LoadImage("spieler.png")

SeedRnd(MilliSecs())  ;"Saat" für zufällige zahlen setzen.

server_ip$ = "127.0.0.1"  ;Ip des Servers
server_port = 7142  ;Port des Servers
client_name$ =Input("Ihr name:  ")
udp = CreateUDPStream()  ;Stream erstellen
If Not udp Then
  Print "Der UDP Stream konnte nicht erstellt werden."
  End
EndIf

;Am Server den Client anmelden.
WriteByte(udp,2)  ;Dem Server mitteilen das wir neu dazu gekommen sind.
WriteString(udp,client_name$)  ;Unseren Namen mitteilen
SendUDPMsg udp,INT_IP(server_ip$),server_port  ;UDP Message senden

Repeat

If KeyDown(203) Then x=x-1
If KeyDown(205) Then x=x+1



  If RecvUDPMsg(udp) <> 0 ;Wenn Meldung empfangen
    message = ReadByte(udp) ;Anhand dieses Bytes weiss man was der Server will

    Select message

      ;Der Server hat eine Chatmessage von einem anderen Clienten
      ;an diesen Client weitergeleitet.
      Case 1
        name$ = ReadString(udp)  ;Name des sendenden Clients
       
For c.client=Each client
        c\x = ReadByte(udp)  ;Nachricht des sendenden Clients
        c\y = ReadByte(udp)
Next       

      ;Der Server teilt uns mit das ein anderer Client beigetreten ist.
      Case 2
        name$ = ReadString(udp)  ;Name des beitretenden Clients
        c.client = New client  ;Ein neues Client objekt erstellen
        c\name$ = name$  ;Name darin speichern (kann man benutzen für Liste)

        ;Nachricht ausgeben
        Print name$ + " ist dem Chat beigetreten."

      ;Der Server teilt uns mit das ein anderer Client rausgeht.
      Case 3
        name$ = ReadString(udp)  ;Name des Clienten
        For c.client = Each client
          If c\name$ = name$ Then Delete c  ;Diesen Clienten löschen
        Next

        ;Nachricht ausgeben
        Print name$ + " hat den Chat verlassen."

    End Select

  EndIf
   
 
    ;Dem Server mitteilen was man gesagt hat.
    WriteByte(udp,1)  ;Dem Server sagen das es sich um eine Chatmessage handelt
    WriteString(udp,client_name$)  ;Den Namen mitteilen
    WriteByte(udp,x) ;Den Inhalt mitteilen
    WriteByte(udp,y)
    SendUDPMsg udp,INT_IP(server_ip$),server_port  ;UDP Message senden


For c.client = Each client
DrawImage spieler,c\x,c\y
Next 


DrawImage spieler,x,y

Flip
Cls
Until KeyHit(1)

;Beim Server den Client abmelden
WriteByte(udp,3)  ;Dem Server sagen das wir gehen
WriteString(udp,client_name$) ;Unser Name senden
SendUDPMsg udp,INT_IP(server_ip$),server_port  ;UDP Message senden

CloseUDPStream(udp) ;Stream schliessen

End


;Funktion zum Umwandeln von String IPs in Integer.
Function INT_IP(IP$)
  a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
  a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
  a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
  a4=Int(IP$)
   
  Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function


mfg
marius


P.S.: Ich hoffe es ist ok wenn ich den code einfach mal verwendet habe.
Er ist hier aus dem Forum aus der tutorial sektion

Ach ja, und für das spieler.png bild könnt ihr irgend ein bild nehmen.
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group