Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 641
Hei, prøver å lage et plattformspill, og har et par spørsmål.

Har til nå basert bevegelse på frames. Jeg har på forhånd satt en variabel som spesifiserer frames per sekund, og har etter hver gang mainloopen kjører regnet ut hvor lang tid det har tatt å kjøre den, og venter X mengde tid før neste gang jeg kjører loopen.

Jeg innser at dette ikke er den beste måten å gjøre det på, så jeg holder på å skrive om koden slik at den baserer seg på tid i stedet.

Hver gang hovedloopen min kjører skjer det 3 ting. Først tar jeg tar i mot alt input fra spilleren og oppdaterer nødvendige variabler basert på dette.

Så regner jeg ut hvor nye posisjoner på monstre og spilleren, og tar meg av collision detection, og setter nye verdier for health osv.

Til slutt tegner jeg skjermen.


Det er del nr.2 som er den interessante her. Jeg sjekker tiden det tok siden sist gang denne delen av koden kjørte, og regner ut hvor lang tid det tok siden sist.

Når nye posisjoner skal settes multipliserer jeg med tiden siden forrige gang jeg oppdaterte.

La oss si figuren min skal flyttes 60 pixler per sekund. I mitt hode blir det riktig å gjøre følgende, verdien på xVelocity er 60.

Kode

void UpdatePositions()
{
     timeSinceLast = ( SDL_GetTicks() / 1000 ) - timeLast;
     timeLast = ( SDL_GetTicks() / 1000 );

     xOffset += xVelocity * timeSinceLast;
}
SDL_GetTicks() gir meg millisekunder siden spillet startet. timeSinceLast bør da være tiden i sekunder siden sist jeg oppdaterte posisjoner, men dette virker jo åpenbart ikke siden figurene mine flyr rundt på skjermen i enorme hastigheter.

Er det noen som klarer å se om jeg brainfarter fullstendig her?

Har holdt på litt, og det ser ut som at alt virker nå bortsett fra oppdatering av posisjoner for figuren min. Den hakker veldig og jeg mistenkte at den ikke klarer verdier med desimaltall. Bruker double for å lagre xOffset og yOffset, men det virker som den ikke klarer noe annet en heltall.

La til en linje som dytter posisjonen ut i en .txt hver gang den oppdaterer posisjonene, og det bekreftet min mistanke

Kode

PosUpdate 1: 0
PosUpdate 2: 0
PosUpdate 3: 0
..
..
PosUpdate 752: 20
PosUpdate 753: 20
PosUpdate 754: 20
..
..
PosUpdate 2516: 60
PosUpdate 2517: 60
PosUpdate 2518: 60
..
..
osv
Nå er jeg stuck, for jeg har ingen aning på hvordan jeg skal fikse dette her. Har prøvd int, double og float, men alle gir samme resultat.

Idioten meg dividerte med en integer og ikke en double.
Sist endret av Detectable; 6. mars 2012 kl. 16:11.
Sitat av Detectable Vis innlegg
Idioten meg dividerte med en integer og ikke en double.
Vis hele sitatet...
Problem solved? (Hvis du snakker om SDL_GetTicks() / 1000, som jeg regner med var feilen)
Sist endret av TanteSpiker; 7. mars 2012 kl. 21:10.
▼ ... over en uke senere ... ▼
Ja stemmer. Endret til SDL_GetTicks() / 1000.0; Nå virker det.