2013-06-09 3 views
1

У меня есть изображение, которое я хочу быть подвижным. Моя проблема в том, что изображение на самом деле не движется, оно просто дублируется, и новое изображение загружается на новое место, в то время как старая позиция по-прежнему содержит изображение.Перемещение изображения на экране

void draw_surface(int srcX, int srcY, int dstX, int dstY, int width, int height, SDL_Surface *source, SDL_Surface *destination) 
{ 
    SDL_Rect src; 
    src.x = srcX; 
    src.y = srcY; 
    src.w = width; 
    src.h = height; 

    SDL_Rect dst; 
    dst.x = dstX; 
    dst.y = dstY; 
    dst.w = width; 
    dst.h = height; 

    SDL_BlitSurface(source, &src, destination, &dst); 
} 

в главной функции:

while (gameRunning) 
{ 
    if (SDL_PollEvent(&event)) 
    { 
     if (event.type == SDL_QUIT) 
     { 
      gameRunning = false; 
     } 
     if (event.type == SDL_KEYDOWN) 
     { 
      if (event.key.keysym.sym == SDLK_DOWN) 
      { 
       dstY += 10; //new position 
      } 
     } 

     //apply 
     apply_surface(0, 10, background, screen); 
     draw_surface(srcX, srcY, dstX, dstY, width, heigth, background, screen); 

    } 


    //update screen 
    SDL_Flip(screen); 

} 

Что случилось с этим кодом?

ответ

1
  1. Вы должны использовать while цикл для опроса событий
  2. Moving чертежа вне блока цикла обработки событий является хорошей идеей
  3. Вы должны очистить экран перед нанесением на него или же старый назад данные буфера будет по-прежнему на нем
Uint32 black = SDL_MapRGB(screen->format, 0, 0, 0); 

while (gameRunning) { 
    while (SDL_PollEvent(&event)) { 
     if (event.type == SDL_QUIT) { 
      gameRunning = false; 
     } 
     if (event.type == SDL_KEYDOWN) { 
      if (event.key.keysym.sym == SDLK_DOWN) { 
       dstY += 10; //new position 
      } 
     } 
    } 
    // Clear screen 
    SDL_FillRect(screen, NULL, black); 

    //apply 
    apply_surface(0, 10, background, screen); 
    draw_surface(srcX, srcY, dstX, dstY, width, heigth, background, screen); 

    //update screen 
    SDL_Flip(screen); 
} 
+0

она работала отлично спасибо большое! –

Смежные вопросы