Archief - C# / Algemeen : Platform game basics

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Cakeman

Legacy Member
Ik ben een tijdje geleden beginnen prullen met de basis van een platform game: het besturen van je character.

Mijn ventje kan prima naar links en rechts wandelen. Nu wil ik de mogelijk tot rennen inbouwen. Ik zou dus willen dat het ventje sneller loopt wanneer je shift ingedrukt hebt.

Ik vang de userinput op in het KeyDown event van mijn form. Wanneer de ingedrukte toets het pijltje naar links is, gaat mijn ventje dus naar links lopen. Wanneer ik nu shift ingedrukt houd, dan gaat hij enkel shift weergeven als ingedrukte toets. Zolang ik shift ingedrukt houd, gaat het indrukken een pijltjestoets niet meer gedetecteerd worden.

Hoe los ik zoiets op?

Dan zit ik nog met enkele algemene vragen:
1) De bewegingssnelheid... Ik los dit op door wanneer mijn ventje wandelt, het character met 1 pixel te verplaatsen, en wanneer hij loopt met twee pixels. Is dit een goede manier van werken?

2) Het springen. Hoe laat ik mijn ventje vloeiend springen wanneer je gewoon op de spatiebalk drukt? Moet dat in een soort loop waarbij ik één of andere sleepfunctie gebruik?

3) Het gebruik van threads... Ik neem aan dat ik best threads gebruik. Eentje voor mijn ventje en eentje voor alle vijanden? Of een thread per vijand? Op het gebied van threads ben ik echt compleet onervaren.

Vich

Legacy Member
Van C# ken ik nog niet veel, maar ik zal deze vragen proberen te beantwoorden:

Dan zit ik nog met enkele algemene vragen:
1) De bewegingssnelheid... Ik los dit op door wanneer mijn ventje wandelt, het character met 1 pixel te verplaatsen, en wanneer hij loopt met twee pixels. Is dit een goede manier van werken?
Nee, dit is geen goede manier van werken. Stel dat je FPS hoger wordt, dan gaat je snelheid van verplaatsing ook veranderen. Wat je moet doen:
Bereken het interval tussen twee frames(in ms). Je verplaatsing is dan:

verplaatsing = frameInterval * jouwOpgegevenSnelheid

Die snelheid is dan bvb 100.

2) Het springen. Hoe laat ik mijn ventje vloeiend springen wanneer je gewoon op de spatiebalk drukt? Moet dat in een soort loop waarbij ik één of andere sleepfunctie gebruik?
Je houd gewoon een variable bij die de hoogte van het springen bijhoudt. En met een soort updater ga je dan die variabele manipuleren (bvb volgens een sinus/cosinus).
Ook dit doe je time-based zoals hierboven.

3) Het gebruik van threads... Ik neem aan dat ik best threads gebruik. Eentje voor mijn ventje en eentje voor alle vijanden? Of een thread per vijand? Op het gebied van threads ben ik echt compleet onervaren.
Threads kan je doen voor de AI van je vijanden (als je die hebt), rendering zou ik in een render loop plaatsen (dus in je hoofdprogramma, niet in een thread).

Je maakt bvb een klasse Humanoid en daar leid je HumanoidPlayer HumanoidOpponent van af. Die HumanoidOpponent kan een OpponentAI bevatten en een OpponentDrawResource (of iets dergelijks). Die drawresource ga je dan via je main loop gebruiken en die opponent ai kan je bvb onder bepaalde interval updaten via een thread.

Cakeman

Legacy Member
Bedankt. Ken je toevallig geen boeken of sites die over dit onderwerp gaan?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan