Gå til innhold

Problem med SDL program...


Anbefalte innlegg

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

Lenke til kommentar
  • 4 uker senere...
Videoannonse
Annonse

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? ;)

Lenke til kommentar
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 :(

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...