joyrider
Legacy Member
Hey,
ik heb dit weekend wat zitten experimenteren met net2 en SDL_Net. Nu ik wou eens probreren een netwerk gamepje te maken. Het spel in kwestie zou een tron cloon worden. Nu de single player versie is niet echt een probleem, maar ik heb wel wat probleempjes met de multiplayer versie.
Nu om te communiceren tussen de server en de clients stuur ik gewoon een code door met daaraan eventuele data aangehecht. om enkele voorbeeldjes te geven:
Code 1 met data player nr is een nieuwe speler aanmaken, Code 2 met player nr is Player moved left etc.
Wat ik momenteel doe is het volgende :
Server start en wacht op connecties
client connecteerd -> Server stuurd code van nieuwe player naar alle clients
Nieuwe speler wordt aangemaakt op de client.
Er wordt op enter geduwd in de server app -> Code start game wordt gestuurd naar alle clients en de clients kunnen hun speler bewegen.
speler op client 1 duwd bvb links -> code move left wordt gestuurd naar server en de server past de data aan in zijn kopie van het speelveld.
en zo gaat het voort.
Nu om alles te testen laat ik de server grafish alles weergeven wat op het speelbord (playfield) staat. maar hier volgt mijn probleem : De client staat steeds voor op de server. Maw de positie op het speelbord bij de client komt niet overeen met wat de server van gegevens heeft. Dit heeft tot effect dat wanneer ik bijvoorbeeld vlak tegen een zijmuur naar beneden duw, dat de player op de client juist getoond wordt maar op de server zit hij 1 vakje achter.
Nu vraag ik me af welke manieren er zijn om alles in "sync" te houden. Zodat dat wat de server "ziet" ook wel degelijk hetgeen is wat de clients zien.
Ik vermoed dat ik een soort van systeempje moet uitdokteren waarin de server op bepaalde momenten gaat controleren wat de positie is bij de client en als dit niet overeen komt dit gaat aanpassen.
Nu ik stuur ook geen posities door van client naar de server om de reden dat er dan gemakkelijk gecheat kan worden, door gewoon die waarden voor ze doorgestuurd worden in het geheugen te wijzigen. (vandaar die turn left/right/up/down messages)
ik heb er al aangedacht om bijvoorbeeld na elke move die een client doet een berichtje te sturen naar de server dat de client gemoved heeft, de server zou dan wachten tot hij dit berichtje gekregen heeft van alle clients met een eventuele tijdslimiet en dan een code terugsturen naar de clients om te zeggen dat ze de volgende move kunnen doen. Maar ik weet niet goed welk effect dit gaat hebben op het spel zelf. (Wat bijvoorbeeld als iemand met een 56k modemke speelt, dan gaan alle andere moete wachten tot deze speler het berichtje verszonden heeft)
iemand enig idee hoe je nu juist het spel in sync kan houden en of bovenvermeld idee een goede aanpak is of zijn er nog andere manieren ?
ik heb dit weekend wat zitten experimenteren met net2 en SDL_Net. Nu ik wou eens probreren een netwerk gamepje te maken. Het spel in kwestie zou een tron cloon worden. Nu de single player versie is niet echt een probleem, maar ik heb wel wat probleempjes met de multiplayer versie.
Nu om te communiceren tussen de server en de clients stuur ik gewoon een code door met daaraan eventuele data aangehecht. om enkele voorbeeldjes te geven:
Code 1 met data player nr is een nieuwe speler aanmaken, Code 2 met player nr is Player moved left etc.
Wat ik momenteel doe is het volgende :
Server start en wacht op connecties
client connecteerd -> Server stuurd code van nieuwe player naar alle clients
Nieuwe speler wordt aangemaakt op de client.
Er wordt op enter geduwd in de server app -> Code start game wordt gestuurd naar alle clients en de clients kunnen hun speler bewegen.
speler op client 1 duwd bvb links -> code move left wordt gestuurd naar server en de server past de data aan in zijn kopie van het speelveld.
en zo gaat het voort.
Nu om alles te testen laat ik de server grafish alles weergeven wat op het speelbord (playfield) staat. maar hier volgt mijn probleem : De client staat steeds voor op de server. Maw de positie op het speelbord bij de client komt niet overeen met wat de server van gegevens heeft. Dit heeft tot effect dat wanneer ik bijvoorbeeld vlak tegen een zijmuur naar beneden duw, dat de player op de client juist getoond wordt maar op de server zit hij 1 vakje achter.
Nu vraag ik me af welke manieren er zijn om alles in "sync" te houden. Zodat dat wat de server "ziet" ook wel degelijk hetgeen is wat de clients zien.
Ik vermoed dat ik een soort van systeempje moet uitdokteren waarin de server op bepaalde momenten gaat controleren wat de positie is bij de client en als dit niet overeen komt dit gaat aanpassen.
Nu ik stuur ook geen posities door van client naar de server om de reden dat er dan gemakkelijk gecheat kan worden, door gewoon die waarden voor ze doorgestuurd worden in het geheugen te wijzigen. (vandaar die turn left/right/up/down messages)
ik heb er al aangedacht om bijvoorbeeld na elke move die een client doet een berichtje te sturen naar de server dat de client gemoved heeft, de server zou dan wachten tot hij dit berichtje gekregen heeft van alle clients met een eventuele tijdslimiet en dan een code terugsturen naar de clients om te zeggen dat ze de volgende move kunnen doen. Maar ik weet niet goed welk effect dit gaat hebben op het spel zelf. (Wat bijvoorbeeld als iemand met een 56k modemke speelt, dan gaan alle andere moete wachten tot deze speler het berichtje verszonden heeft)
iemand enig idee hoe je nu juist het spel in sync kan houden en of bovenvermeld idee een goede aanpak is of zijn er nog andere manieren ?
. als er een 56K idioot op u spel zit gaat het gewoon onmogelijk traag gaan. Ge gaat altijd van die dingen hebben. Het ding is wel dat je kan zeggen 'de server is altijd correct'. Dus welk beeld de clients op hun scherm hebben doet er geen zak toe. Een 56K'er zal dan heel moeilijk kunnen spelen, een breedbander met een RTT van 5ms ofzo gaat perfect kunnen spelen.
, en ik zal het direct verduidelijken.
!