【问题标题】:SDL Window - Rendering a sprite C++SDL 窗口 - 渲染精灵 C++
【发布时间】:2018-12-18 05:57:53
【问题描述】:

我不确定渲染精灵时哪里出错了。在我在讲座中学到的内容中,要渲染 PNG,您必须首先有一个将文件加载到的表面,然后您必须有一个纹理并从表面创建纹理,然后释放空间然后它应该输出它?我在哪里错了?可以是文件路径吗?如果是这样,我已尝试将完整目录和所有内容放入其中?

这是我的代码:

case 2:
{
    //game code..............

    SDL_SetRenderDrawColor(renderer, 255, 210, 0, 0);
    SDL_RenderClear(renderer);

    SDL_Texture* sprite;
    SDL_Texture* blockt;
    SDL_Texture* points;
    SDL_Surface* blockS;
    SDL_Surface* windowS;
    SDL_Surface* temp;

    blockS = IMG_Load("Barriers.png");
    blockt = SDL_CreateTextureFromSurface(renderer, blockS);
    SDL_FreeSurface(blockS);

    SDL_RenderPresent(renderer);
}
break;

尝试忽略临时和我刚刚尝试过的不同事物的东西,并在那里留下了一些代码。基本上只需要知道为什么它不起作用。我在顶部有 SDL_INIT_EVERYTHING 以及 IMG_Init(SDL_INIT_EVERYTHING) 并且我已经包含了 SDL_image.h 标头。

【问题讨论】:

  • 所有这些(SDL_RenderPresent 除外)都应该在您开始游戏时发生一次。要渲染一个精灵,您只需要每个精灵一个 SDL_RenderCopy,并在帧末尾使用 SDL_RenderPresent

标签: c++ image rendering sdl sdl-2


【解决方案1】:

您必须使用SDL_RenderCopy(在SDL_RenderPresent 之前)实际绘制纹理。

请注意,一旦你有了纹理,释放原始表面就无关紧要了(尽管你确实想在某个时候释放它)。你用它做什么不会改变那种质地。它们是独立的实体。您需要做的就是渲染纹理。

另外,去看看 wiki (here's the rendering category page)。它应该让您更好地了解您可以做什么。

【讨论】:

  • “释放表面是无关紧要的”
  • @BradAllred 澄清。
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2023-03-08
  • 2019-06-29
相关资源
最近更新 更多