kake_fisk Skrevet 19. februar 2009 Del Skrevet 19. februar 2009 Er ganske ny med SDL, men har fått problemer med å bevege ett object med piltastene. Source: #ifdef __cplusplus #include <cstdlib> #else #include <stdlib.h> #endif #ifdef __APPLE__ #include <SDL/SDL.h> #else #include <SDL.h> #endif int main ( int argc, char** argv ) { // initialize SDL video if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "Unable to init SDL: %s\n", SDL_GetError() ); return 1; } // make sure SDL cleans up before exit atexit(SDL_Quit); // create a new window SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE|SDL_DOUBLEBUF); if ( !screen ) { printf("Unable to set 640x480 video: %s\n", SDL_GetError()); return 1; } // load an image SDL_Surface* bmp = SDL_LoadBMP("cb.bmp"); if (!bmp) { printf("Unable to load bitmap: %s\n", SDL_GetError()); return 1; } // centre the bitmap on screen int spr1_x = 0, spr1_y = 0; SDL_Rect dstrect; dstrect.x = spr1_x; dstrect.y = spr1_y; // program main loop bool up = false; bool down = false; bool left = false; bool right = false; bool done = false; while (!done) { // message processing loop SDL_Event event; while (SDL_PollEvent(&event)) { // check for messages switch (event.type) { // exit if the window is closed case SDL_QUIT: done = true; break; case SDL_KEYDOWN: { switch (event.key.keysym.sym) { case SDLK_LEFT: left = true; break; case SDLK_RIGHT: right = true; break; case SDLK_UP: up = true; break; case SDLK_DOWN: down = true; break; case SDLK_ESCAPE: done = true; break; default: break; } } case SDL_KEYUP: switch( event.key.keysym.sym ) { case SDLK_LEFT: left = false; break; case SDLK_RIGHT: left = false; break; case SDLK_UP: left = false; break; case SDLK_DOWN: left = false; break; default: break; } } // end switch } // end of message processing if (left) {spr1_x -= 1;} if (right) {spr1_x += 1;} if (up) {spr1_y -= 1;} if (down) {spr1_y += 1;} // DRAWING STARTS HERE // clear screen SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); // draw bitmap SDL_BlitSurface(bmp, 0, screen, &dstrect); // DRAWING ENDS HERE // finally, update the screen :) SDL_Flip(screen); } // end main loop // free loaded bitmap SDL_FreeSurface(bmp); // all is well;) printf("Exited cleanly\n"); return 0; } Vet noen hva som er galt? Lenke til kommentar
spacemonster Skrevet 19. februar 2009 Del Skrevet 19. februar 2009 Du setter aldri sprite objektets x og y til dstrect (dette må kopieres hver gang) inne i løkken der spillet oppdaterer seg hele tiden. Lenke til kommentar
kake_fisk Skrevet 20. februar 2009 Forfatter Del Skrevet 20. februar 2009 Okai, takk. Skal jeg sette x og y utenfor main loopen som globale variabler da? Lenke til kommentar
spacemonster Skrevet 20. februar 2009 Del Skrevet 20. februar 2009 (endret) Nei, det trenger du ikke. Du må sette: (det var dette jeg mente med å kopiere hver gang) SDL_Rect dstrect; dstrect.x = spr1_x; dstrect.y = spr1_y; i while-løkken, etter du oppdaterer med up, left, osv. Hvis dstrect.x hadde vært en peker hadde din løsning funket. Endret 20. februar 2009 av spacemonster Lenke til kommentar
kake_fisk Skrevet 20. februar 2009 Forfatter Del Skrevet 20. februar 2009 Takk for hjelpen, men for å være helt erlig tror jeg jeg skal omskrive dette spillet på nytt. Det har blitt så rotete og vanskelig. Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2009 Del Skrevet 21. februar 2009 (endret) Smart. Det er alltid lurt å jobbe for en så ryddig og oversiktlig kode som mulig. Både fordi det er god trening og praktisk, men også fordi det da blir lettere å endre på ting senere. Vet ikke hvor mye du kan av C++, men objektorientering er noe du bør sette deg inn i hvis du ikke er kjent med det fra før av. Endret 21. februar 2009 av Dead_Rabbit Lenke til kommentar
kake_fisk Skrevet 21. februar 2009 Forfatter Del Skrevet 21. februar 2009 Jeg har alltid kunne litt C++, men i denne uka har jeg prøvd å virkelig sette meg inn i det, har lært alle de nødvendige tingene som looper, funksjoner, typer, data strukturer og sånnt. Men er ikke helt sikker på hva objektorienterings programering er. Er det sånn som dette? void obj1() { ... } main() { obj1() obj2() } Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2009 Del Skrevet 21. februar 2009 Nei, det blir ikke helt objektorientering. Objektorientering er når man enkapsulerer funksjoner og variabler i klasser og lager logiske enheter for funksjonalitet. Dette er et ganske stort tema, så jeg tror ikke jeg går noe nærmere inn på det. Sjekk ut en bok eller en tutorial på nettet (en oppdatert og god tutorial, that is). Lenke til kommentar
kake_fisk Skrevet 21. februar 2009 Forfatter Del Skrevet 21. februar 2009 Okay, takk skal søke litt rund på google. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå