我正在开发一款具有可破坏地形的游戏(例如在游戏《蠕虫》或《焦土》中),并通过蒙版使用像素完美碰撞检测。
关卡是一个单一的表面,现在它的工作方式是我每帧创建一个副本,绘制所有需要在其上绘制的精灵,然后将可见区域blit到显示表面。
有什么办法可以避免每帧复制整个关卡表面并且仍然可以使用 pygame 中的像素完美碰撞工具?
我尝试先对水平面进行 blitting,然后再对屏幕上的每个 sprite 进行 blit(通过相机调整它们的 blit 坐标,除了坐标是静态的玩家角色),但在这种情况下,碰撞检测系统崩溃了,我可以' t 似乎能够修复它。
更新
我设法使其工作如下:绘制精灵时,我将它们的游戏世界坐标(基本上是相对于关卡位图原点的坐标)转换为屏幕坐标(相对于相机的坐标,这是当前水平的可见区域)。
在碰撞检测阶段,我使用相对于水平面定位的坐标和边界框;所以就像上面一样。问题是相机的位置绑定到玩家的位置,这不是也不应该是静态值(我真的不知道我是如何设法这么长时间没有意识到这一点的)。
虽然这解决了我的问题,但下面的答案更全面地介绍了如何在这种情况下提高性能。我也愿意接受使用其他库的建议,这些库可以使考验更容易或更快。我曾考虑过 pyglet 和 rabbyt,但看起来那里也存在同样的问题。