In deze post zal ik uitleggen hoe je zelfgemaakte variabelen kunt synchroniseren met andere spelers. Deze tutorial gaat ervan uit dat je al een basis voor een game hebt waarop je verder kunt bouwen. Een loginscherm laten zien, het "speler object" en het "andere speler object" komen niet aan bod. Als je nog niet zover bent, in de beginnen met GameMaker Server tutorial komen die onderwerpen wel aan bod.
Er is een variabele "clothing_sprite", die opslaat welke sprite bovenop de sprite van de speler wordt getekend, op deze manier:
We willen dat deze sprite ook bij alle other player objecten verschijnt, en het moet dezelfde sprite zijn die de speler gebruikt. Voor deze tutorial neem ik aan dat de sprites gewisseld worden door op 1, 2 of 3 te drukken. Voeg deze code toe aan het player object:
Ik houd ervan om dubbele code in mijn projecten zo minimaal mogelijk te houden. Ik wil de drawing-code niet op twee verschillende plaatsen hoeven te updaten als ik besluit dat ik de code wil veranderen. Maak een nieuw object, en noem het iets in de zin van "par_players". In dit object gaan we alle code voor zowel het player object als het other player object neerzetten.
Voeg deze code voor het tekenen van de kleren toe aan het draw event:
Initialiseer de variabele in het create event:
Stel het parent-object van zowel het player object als het other player object in op dit nieuwe "par_players" object. Zorg ervoor dat je het overgeërfde event aanroept, als je al een create of draw event aan het player object of het other player object hebt toegevoegd:
Als laatste moet de waarde van de variabele nog naar de andere clients worden verzonden. Je hoeft er niet voor te zorgen dat de variabele naar andere spelers wordt verzonden als die verbinden en je hoeft er ook niet voor te zorgen dat een variabele alleen wordt verzonden als de waarde verandert.
Voeg deze code toe aan het step event van het player object:
Bovenstaande code vertelt de extensie dat er een variabele met de naam clothing_sprite is die naar andere spelers moet worden verzonden. De extensie zal vervolgens bepalen wat de beste manier is om de variabele te verzenden en wanneer deze verzonden moet worden.
Let op: Als je een getal verzend waarvan alleen het hele gedeelte van belang is, maar je weet dat het getal een kommagetal is, round(...), floor(...) of ceil(...) de waarde dan alvorens deze te verzenden. Hele getallen gebruiken minder bandbreedte dan kommagetallen. Strings gebruiken in het algemeen ook meer dan getallen. Als je een getal als string verzend, converteer het dan eerst naar een real. Met gms_self_set_precision(...) kun je instellen hoe precies een variabele moet worden verzonden.
Voeg deze code toe aan het draw event van het other player object:
Die code vraagt de waarde van de variabele op, en slaat die waarde op in "clothing_sprite". Vervolgens roept de code het overgeërfde draw event aan, dat de sprite van de speler, en de kleren erbovenop drawt. De player_id variabele is automatisch door de extensie aangemaakt, en wordt gebruikt om spelers van elkaar te onderscheiden. De variabele bestaat in elke instantie van het other player object die gemaakt is door GameMaker Server.