【问题标题】:Draw image in function在函数中绘制图像
【发布时间】:2015-02-26 05:39:10
【问题描述】:

我想在按下空格键时绘制图像。这是我的代码:

void drawImage()
{
   rect.x = 100;
   rect.y = 100;

   SDL_Surface *image = IMG_Load("image.png");
   SDL_BlitSurface(image, NULL, screen, &rect);
}

这里叫:

while (SDL_PollEvent(&event))
{
    if (event.type == SDL_QUIT)
    {
        gameRunning = false;
    }
    if (event.type == SDL_KEYDOWN)
    {
        if (event.key.keysym.sym == SDLK_SPACE)
        {
            drawImage();
        }
    }

}

当我按空格键时,图像未绘制。怎么了?

【问题讨论】:

  • 也许你缺少翻转表面
  • @Photon 哎呀就是这样。但是当我按下空间时,图像会出现,但当我释放空间时,它会消失。那我该如何解决呢?
  • @WilhelmMichaelsen:SDL 是即时绘图,而不是保留的场景图。如果您希望图像在以后的帧中显示,则必须在以后的帧中再次渲染(将其保存在内存中,不要每次都访问文件)。

标签: c++ sdl sdl-1.2


【解决方案1】:

Flip 屏幕缓冲区 (SDL_Surfaces)。

【讨论】:

    【解决方案2】:

    在你的线路之后

    SDL_BlitSurface(image, NULL, screen, &rect);
    

    添加

    SDL_UpdateRect(screen, 0, 0, 0, 0);
    

    【讨论】:

      【解决方案3】:

      函数是否在主循环中绘制,没有按空格的东西?

      bool draw = false;
      
      while (SDL_PollEvent(&event))
      {
          if (event.type == SDL_QUIT)
          {
              gameRunning = false;
          }
          if (event.type == SDL_KEYDOWN)
          {
              if (event.key.keysym.sym == SDLK_SPACE)
              {
                 draw = true;
              }
          }
      
      }
      
      
      int main()
      {  
        if(draw){ 
          drawImage();
        }
          //DO SOME ERROR CHECKING
      
      }
      

      【讨论】:

      • 他的代码没有填充/清除屏幕功能,所以不是这样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2011-02-23
      • 2012-07-03
      • 1970-01-01
      • 2013-02-28
      • 2011-10-26
      相关资源
      最近更新 更多