|
|
1
8
尝试将at()的所有出现项替换为[]运算符。例如:
然后打开所有优化。[]和at()都是函数调用-为了获得最大的性能,您需要确保它们是内联的,这就是提高优化级别所要做的。 您还可以对墙对象执行一些最小的缓存-例如:
|
|
|
2
2
尝试缩小性能问题的原因(也称为分析)。我将尝试只绘制一个对象,同时继续更新所有对象。如果它突然变得更快,那么它就是一个DirectX绘图问题。 否则,尝试绘制所有对象,但只更新一个墙。如果它更快,那么您的update()函数可能太贵了。 |
|
|
3
1
|
|
|
4
1
也许你只是忘记了打开发布模式:)我以前有过一些问题,因为调试模式,我认为我的代码非常慢。如果不是这样的话,你可能在渲染部分或者大量的对象时遇到问题。您提供的代码看起来不错… |
|
|
5
0
你试过多个缓冲器吗(A.K.A. 双缓冲 )对于位图? 典型的场景是绘制一个缓冲区,然后当第一个缓冲区复制到屏幕时,绘制第二个缓冲区。 另一种技术是在内存中有一个巨大的“逻辑”屏幕。物理显示中绘制的部分是 视口 或 看法 在一个很小的区域 符合逻辑的 屏幕。移动背景(或屏幕)只需要一个图形处理器的副本。 |
|
|
6
0
您可以帮助批处理sprite draw调用。假设您的draw调用使用相关参数调用ID3DxPrite::draw的唯一实例。 通过调用id3dxsprite::begin(使用d3dxsprite_sort_texture标志集),然后在完成所有渲染后调用id3dxsprite::end,可以大大提高性能。ID3DXSPRITE将按纹理对所有sprite调用进行排序,以减少纹理开关的数量,并将相关调用批处理在一起。这将大大提高性能。 但是,如果没有看到更新和draw调用的内部结构,就很难说得更多。以上只是猜测… |
|
|
7
0
用不同的绘制调用绘制每一面墙是一个坏主意。尝试将数据批处理到单个顶点缓冲区/索引缓冲区中,并将其发送到单个绘图中。这是一个更理智的想法。 不管怎样,为了弄清楚为什么它会慢慢地运行,首先尝试使用一些CPU和GPU(PerfHud、Intel GPA等)来了解瓶颈是什么(如果是CPU或GPU)。然后你可以努力减轻这个问题。 |
|
|
8
0
查看你的墙列表不太可能是你减速的原因。在3D中绘制对象的成本通常是限制因素。 重要的部分是绘制代码、用于创建DirectX设备的标志以及用于创建纹理的标志。我在黑暗中的刺…检查您是否将设备初始化为HAL(硬件3D)而不是REF(软件3D)。 还有,你画了多少精灵?每次抽奖都有相当数量的管理费用。如果你每帧超过两百,那将是你的限制因素。 |
|
|
Dan Hill · 将精灵返回其原始位置? 8 年前 |
|
|
ajjanna12 · PygameSprites即使在函数设置参数为 8 年前 |
|
|
user8780062 · 将精灵添加到Pygame光线投射引擎 8 年前 |
|
|
DarkBlood202 · 如何在Pygame中根据角度移动精灵 8 年前 |
|
|
ODOG · Unity 2d动作脚本问题 8 年前 |
|
|
Vasya2014 · 精灵跟随一个不同的精灵并延迟 8 年前 |