2D游戏引擎如何组织游戏对象?

时间:2016-07-11 16:11:50

标签: python pygame

晚上好(来自欧洲)。

我试图用python和pygame来创建一个可以工作的2D游戏引擎 与Unity 3D类似,但您只能创建2D游戏。
为了解释我的问题,我将向您展示我需要的一些课程 在我继续之前知道。


我有一个名为 Sprite 的类,它代表我的游戏对象,我们关心的方法是渲染方法。这个方法被调用了 每秒每帧,并将精灵对象的图像绘制到屏幕中。 它还调用另一种方法更新,您可以覆盖并创建一些方法 你的精灵对象的逻辑(我称之为大脑:p)。我还有一个场景类,我将所有的精灵对象存储到一个链表中。

为了渲染场景的所有游戏对象,我使用上述算法在场景类中创建了一个方法:

#obj is a sprite object.
#Is been called every frame per second.
for obj in gameobjects:
    obj.render()

正如您所看到的,这是渲染场景中所有游戏对象的最简单方法。这就是我的问题开始的地方。如果我们说我有10000场比赛 对象进入场景这个for循环将延迟帧导致滞后问题。

我想到的一个解决方案是仅渲染游戏对象 我可以看到(窗口边框内的游戏对象)。这很好用 但问题是我必须检查所有进入我的游戏对象 场景在窗口分辨率内,只渲染它们。所以我做了这样的事情:

#This method is been called only every time there is a movement
#action into te game causing all the game objects to change position.
for obj in all_game_objects:
    if inside_resolution(obj):
        render_objects.append(obj)

#Is been called every frame per second.
for obj in render_objects:
    obj.render()

正如你所看到的,我仍然需要检查所有的游戏对象,所以我没有成功!

如果我能以某种方式将我的游戏对象组织成像二叉树这样的数据结构,并创建一些只返回游戏对象的智能方法 在窗口分辨率内,我可以成功实现快速渲染系统。

所以我的整个问题是我可以用什么数据结构来存储我的游戏对象? 一棵树会很快但我怎么知道哪些游戏对象在里面 屏幕分辨率没有全部检查?

从听说过,像unity3D这样的现代游戏引擎正在使用树木 渲染场景的不同区域(以及视距适合的区域)。这就是它的工作原理。

我希望对我的问题的描述已经足够了。
感谢您的耐心等待:p

1 个答案:

答案 0 :(得分:1)

将所有对象放在二维网格中,网格代表整个场景。然后,您可以轻松地仅迭代屏幕上可见的那些。现在碰撞检测变得更容易了。

细胞的大小取决于你。尝试不同的尺寸,看看哪种效果最好