Miromurr Skrevet 25. april 2008 Skrevet 25. april 2008 Hei! Jeg har litt problemer med et SDL program jeg driver å lager... Jeg følger denne tutorialen Problemet er at slangen som blir tegnet, fortsetter å gå til høyre hvis jeg f.eks trykker på høyre piltast. Hvordan får jeg den til å stoppe når jeg slipper tasten? // Includes: #include "SDL.h" // Variables: const int WINDOW_WIDTH = 640; const int WINDOW_HEIGHT = 480; const char* WINDOW_TITLE = "SDL Start"; // Pixels per second: const float SNAKE_SPEED_X = 100.0; const float SNAKE_SPEED_Y = 100.0; // Main: int main(int argc, char **argv) { SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER ); SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0, SDL_HWSURFACE | SDL_DOUBLEBUF ); SDL_WM_SetCaption( WINDOW_TITLE, 0 ); SDL_Surface* bitmap = SDL_LoadBMP("SnakeSDL.bmp"); SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) ); // Variables: float snakeX = 0.0; float snakeY = 100.0; float snakeSpeedX = 0.0; float snakeSpeedY = 0.0; float deltaTime = 0.0; int thisTime = 0; int lastTime = 0; // Game-loop: SDL_Event event; bool gameRunning = true; bool keysHeld[323] = {false}; while (gameRunning) { thisTime = SDL_GetTicks(); deltaTime = (float)(thisTime - lastTime) / 1000; lastTime = thisTime; if (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { gameRunning = false; } // Keyboard input: if (event.type == SDL_KEYDOWN) { keysHeld[event.key.keysym.sym] = true; } if (event.type == SDL_KEYUP) { keysHeld[event.key.keysym.sym] = false; } } if ( keysHeld[sDLK_ESCAPE] ) { gameRunning = false; } if ( keysHeld[sDLK_LEFT] ) { snakeSpeedX = -SNAKE_SPEED_X; } if ( keysHeld[sDLK_RIGHT] ) { snakeSpeedX = SNAKE_SPEED_X; } if ( keysHeld[sDLK_UP] ) { snakeSpeedY = -SNAKE_SPEED_Y; } if (keysHeld[sDLK_DOWN]) { snakeSpeedY = SNAKE_SPEED_Y; } snakeX += snakeSpeedX * deltaTime; snakeY += snakeSpeedY * deltaTime; SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255)); // Drawing: SDL_Rect source; source.x = NULL; source.y = NULL; source.w = 76; source.h = 68; SDL_Rect destination; destination.x = snakeX; destination.y = snakeY; destination.w = 76; destination.h = 68; SDL_BlitSurface(bitmap, &source, screen, &destination); SDL_Flip(screen); // Give the computer a break: SDL_Delay(1); } // Free surface: SDL_FreeSurface(bitmap); // Exit SDL: SDL_Quit(); return 0; } P.S: Jeg bruker Code::Blocks... Miromurr SDL_SnakeProg.zip
cp-nilsen Skrevet 19. mai 2008 Skrevet 19. mai 2008 Grunnen er at du har satt at når høyreknappen trykkes, så settes "farten til høyre" hvis du skjønner Hvis du vil at den bare skal flytte seg til høyre _mens_ du trykker knappen, må du legge til på x-posisjonen, ikke x-farten. Var det til hjelp?
Miromurr Skrevet 23. mai 2008 Forfatter Skrevet 23. mai 2008 Grunnen er at du har satt at når høyreknappen trykkes, så settes "farten til høyre" hvis du skjønner Hvis du vil at den bare skal flytte seg til høyre _mens_ du trykker knappen, må du legge til på x-posisjonen, ikke x-farten. Var det til hjelp? Ah, tusen takk! Jeg hadde akkurat gitt opp SDL, var ingen som ville hjelpe meg
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å