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.
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
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.
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; }
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
Idioten meg dividerte med en integer og ikke en double.
Sist endret av Detectable; 6. mars 2012 kl. 16:11.