【发布时间】:2011-10-08 17:14:03
【问题描述】:
我正在使用 SFML,但我找不到任何关于库如何工作的解释,而且我遇到了性能问题。 我正在尝试制作一个由 50x50 瓦片组成的瓦片图,每个瓦片宽度为 20x20 像素。 1)每个图块都是一个 sf::sprite,其图形图像只是一个大图像(我的图块集),我在其上设置了一个 20x20 的子矩形。 2)我只是循环使用瓷砖总数并使用 App.Draw(Map[i][j]);绘制每个图块,我正在使用“视图”对象,因此我可以移动视图
现在我的 FPS 非常低(1 张图像/秒),我想知道与前面几点相关的两件事。 1)是否每个 sf::sprite 都需要时间来绘制,因为它们的图像来自被裁剪的巨大图像? 2)我是否可以遍历整组图块,甚至是我没有看到的图块?我假设视图对象使得不在视图中的图块不会徒劳地重新计算
谢谢
【问题讨论】:
-
向我们展示你如何渲染你的地图,(发布一些代码),这不应该发生。此外,您是在每次迭代时还是在程序开始时裁剪图块?
-
我只是在做: for(int i=0; i
-
即使使用 20 x 20 的图块(这甚至不会填满屏幕),我在滚动时也能获得 20 FPS,这似乎太低了
-
我对 SFML 不是很熟悉,但您应该尝试只绘制可见的东西。大多数图形库不这样做,因为客户端可以更有效地做到这一点。另外,请确保 SFML 使用的是硬件加速渲染,而不是软件块。
-
没有任何代码,答案是你做错了。试试探查器。冒险猜测你在每一帧都绑定纹理。 SFML 在后台使用 Opengl,所以它相当快,除非你在 opengl 中做一些愚蠢的事情。