Optimization 规划2D互动程序引擎-性能问题

Optimization 规划2D互动程序引擎-性能问题,optimization,graphics,2d,sdl,tile-engine,Optimization,Graphics,2d,Sdl,Tile Engine,正如标题所说,我正在充实2D平台引擎的设计。它仍处于设计阶段,但我担心渲染器会出现问题,如果它们成为问题,我希望避免它们 我将SDL用于我的基本库,游戏将被设置为使用单个大型Uint16数组来保存瓷砖。这些索引进入第二个“平铺定义”数组,引擎的所有部分都使用这些定义,从冲突处理到图形例程,这是我最关心的 图形引擎设计为以640x480分辨率运行,具有32x32个平铺。每帧每层绘制21x16个平铺(用于处理滚动时显示的额外平铺),最多可以绘制四个层。层只是单独的平铺数组,但平铺定义数组对所有四个层

正如标题所说,我正在充实2D平台引擎的设计。它仍处于设计阶段,但我担心渲染器会出现问题,如果它们成为问题,我希望避免它们

我将SDL用于我的基本库,游戏将被设置为使用单个大型
Uint16
数组来保存瓷砖。这些索引进入第二个“平铺定义”数组,引擎的所有部分都使用这些定义,从冲突处理到图形例程,这是我最关心的

图形引擎设计为以640x480分辨率运行,具有32x32个平铺。每帧每层绘制21x16个平铺(用于处理滚动时显示的额外平铺),最多可以绘制四个层。层只是单独的平铺数组,但平铺定义数组对所有四个层都是通用的

我担心的是,我希望能够利用这个引擎的透明胶片和动画瓷砖,由于我对设计不太熟悉,我担心我目前的解决方案效率太低,无法正常工作

我的目标FPS是一个每秒60帧的平面,在绘制所有四个层的情况下,我看到每秒需要绘制21x16x4x60=80640个单独的32x32px平铺,再加上精灵需要许多奇数大小的光点,这似乎有点过分。那么,有没有更好的方法来渲染我的tilemap设置?我正在寻找使用硬件加速来绘制tilemaps的可能性,如果这将有助于大大提高性能的话。我也希望能够在稍旧的电脑上运行这个游戏


如果我想要的太多,那么我不认为降低引擎的性能是不可能的。

将帧速率降低到30fps怎么样。我认为这对于2D游戏来说已经足够了。

把帧速率降低到30fps怎么样。我认为这对于2D游戏来说已经足够好了。

我认为问题在于绘制调用的数量,而不是绘制的所有像素的总“填充率”。请记住,您必须每秒拨打80000多个电话。我认为你最大的改进是以某种方式将这些产品组合在一起

减少瓷砖和层填充率的一种策略是将静态区域组合在一起。例如,如果您知道某个区域不需要更新,则可以对其进行缓存。很大程度上取决于图层是否独立滚动(视差样式)

另外,在谷歌上搜索“脏矩形”,看看是否有适合你需要的方案


就我个人而言,我会试试看。这可能不会影响你的整体游戏设计,如果你在逻辑和表现之间有很好的分离,你可以在奶牛回家之前优化瓷砖的绘制。

我认为问题在于绘制调用的数量,而不是绘制的所有像素的总“填充率”。请记住,您必须每秒拨打80000多个电话。我认为你最大的改进是以某种方式将这些产品组合在一起

减少瓷砖和层填充率的一种策略是将静态区域组合在一起。例如,如果您知道某个区域不需要更新,则可以对其进行缓存。很大程度上取决于图层是否独立滚动(视差样式)

另外,在谷歌上搜索“脏矩形”,看看是否有适合你需要的方案


就我个人而言,我会试试看。这可能不会影响你的整体游戏设计,如果你在逻辑和表现之间有很好的分离,你可以优化瓷砖的绘制,直到奶牛回家。

我同意Kombuwa的观点。如果这只是一个简单的基于瓷砖的2D游戏,你真的应该降低一点标准,因为这不是Crysis。30FPS速度非常平稳(研究指挥与征服3限制为30FPS)。尽管如此,我还是用GDI+编写了一个运行速度为14FPS(1900 x 1200)的远程桌面查看器,它仍然非常流畅。我认为你的2D游戏可能会很好,尤其是使用SDL。

我同意Kombuwa的观点。如果这只是一个简单的基于瓷砖的2D游戏,你真的应该降低一点标准,因为这不是Crysis。30FPS速度非常平稳(研究指挥与征服3限制为30FPS)。尽管如此,我还是用GDI+编写了一个运行速度为14FPS(1900 x 1200)的远程桌面查看器,它仍然非常流畅。我认为在2D游戏中,你可能会没事,尤其是使用SDL。

我认为你会惊喜地发现,你一秒钟可以画出这么多瓷砖。现代图形硬件可以在每帧60 fps的情况下多次填充1600x1200帧缓冲区,因此您的640x480帧缓冲区将不会有问题。试试看你能得到什么

你绝对应该利用硬件加速。这将为您提供1000倍的性能,您只需付出很少的努力


如果您确实发现需要优化,那么最简单的方法就是只重新绘制自上一帧以来已更改的屏幕区域。听起来您需要了解任何正在设置动画的平铺,以及每一帧中任何已更改状态的平铺。根据游戏的不同,这可能是毫无益处,也可能是巨大的节省——这实际上取决于每一帧屏幕的变化量。

我想你会惊喜地发现,你一秒钟可以画出这么多的瓷砖。现代图形硬件可以以60 fps的速度每帧多次填充1600x1200帧缓冲区,因此您的640x480帧缓冲区不会有问题。试试看你能得到什么

你绝对应该利用硬件加速。这将为您提供1000倍的性能,您只需付出很少的努力

如果您确实发现需要优化,那么最简单的方法是