【问题标题】:Fastest way to render a tiled map with SDL2 [closed]使用 SDL2 渲染平铺地图的最快方法 [关闭]
【发布时间】:2014-03-02 19:47:44
【问题描述】:

我正在寻找一种非常快速的方法来使用 SDL2 渲染具有三层的平铺地图。 我正在使用 SDL_RenderCopy 但它很慢...

【问题讨论】:

  • 您是在渲染整个地图(甚至是屏幕外的图块)还是在执行某种视图剔除?还可以使用SDL_GetRendererInfo 来查看您是否正在获得硬件加速,并尝试关闭不需要它的纹理的 alpha 混合。如果这些都没有帮助,并且渲染速度确实是这里缓慢的原因,那么我想您尝试做的事情对于简单的 SDL 渲染来说太过分了,您可以切换到更先进、更快(如果使用得当)的东西,比如 OpenGL。
  • 感谢您的回答,但我已经全部检查过了,现在找到了解决方案。

标签: c++ sdl-2


【解决方案1】:

好的,我找到了我需要的东西,所以我会在这里解释一下。

我实际上有四层,我曾经在一个简单的 for 循环中渲染它们。 事实上,for 循环并不是渲染平铺地图的好方法。

最好的方法是在主渲染循环之前将每一层渲染成一个大纹理,然后将每个大纹理渲染到屏幕上。 for 循环需要花费大量时间来处理,但是,渲染大纹理非常快。

看看下面的代码,考虑到“bigTexture”是一个层,而“width”和“height”是那个层的大小。

Uint32 pixelFormat;
SDL_QueryTexture(tileset, &pixelFormat, NULL, NULL, NULL);
SDL_Texture *bigTexture = SDL_CreateTexture(renderer, pixelFormat, SDL_TEXTUREACCESS_TARGET, width, height);
SDL_SetRenderTarget(renderer, bigTexture);
// Put your for loop here

完成了,我们将图层加载到一个大纹理中。让我们看看如何渲染它。

SDL_SetRenderTarget(renderer, NULL);
// Create a SDL_Rect which defines the big texture's part to display, ie the big texture's part visible in the window.
// Display the big texture with a simple SDL_RenderCopy

就是这样。您现在能够以非常快速的方式渲染平铺地图。

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2020-08-24
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2017-12-31
    • 2014-05-04
    相关资源
    最近更新 更多