Gå til innhold

Spm ang. WinSock Kontrollen.


Anbefalte innlegg

Hei.

 

Driver for tiden på med et lite PingPong spill, ikke noe avansert.

Det jeg holder på med nå er en slags 2-player sak som funkgerer over nettet.

F.eks at du har en kammerat du vil spille mot.

Jeg bruker winsock til dette, og da jeg sender info posisjon av Ballen osv så blir det "Overflow". Sender ut for mye en det winsock klarer.

 

Er det noen måter man kan endre dette? Jeg bruker en timer til å sende ut dataen, men om jeg setter opp interval for mye blir det på en måte dårlig FPS siden den mottar posisjon treigt. Er det noe annet en winsock som kan brukes som støtter litt fart? :)

 

Takk.

Lenke til kommentar
Videoannonse
Annonse

Det finnes flere teknikker for dataoverføringer, men det er spesielt en du kansje bør prøve ut. Det går enkelt og greit ut på å sende en retnings-verdi sammen med posisjon, slik at begge klienter kan regne ut den andre spillerens neste posisjon, før neste data har kommet frem. (Posisjon-verdiene har da kun en praktisk funksjon om en av spillerene skifter retning) På den måten får du et mye "glattere" spill.

Endret av Jonas
Lenke til kommentar

Desverre er jeg ikke så kjent med WinSock kontrollen, brukte den aldri.

Men jeg kan forestille meg at den har en flush kommando.

Jeg ville heller ikke brukt timer.

 

Sånn jeg ville laget det, var å bruke Timer() til å få tak i hvor mye ballen eller spillerne skal bevege seg.

 

Private ball_ax As Point
Private Static time_passed As Double
Public Sub GetTimePassed() 
 Static Dim old_time As Double
 Dim new_time As Double
 new_time = Timer()
 
 time_passed = IIf(old_time != 0, new_time - old_time, 1.0)
 old_time = new_time;

End Function
Public Sub MoveBall() As Point
 Dim new_ballpos As Point
 
 new_ballpos.X = ballpos.X + ball_ax.X * time_passed
 new_ballpos.Y = ballpos.X + ball_ax.Y * time_passed
 If Intersects(Player1Brick, new_ballpos) Or Intersects(Player2Brick, new_ballpos) Then
   ball_ax.X = -ball_ax.X
 End If
 If new_ballpos.Y < 0 Or new_ballpos.Y > Screen.Height - ballsize.Height Then
   ball_ax.Y = -ball_ax.Y
 End If

 ballpos = new_ballpos

End Sub

Public Sub UpdateClient()
 ' Denne funksjonene trenger ikke bli kalt så ofte, siden hver maskin skal være mer eller mindre oppdatert.
 Send(ballpos)
 Send(player1pos)
 Send(player2pos)

End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...