2

这是一个有点模糊的问题,但请耐心等待。我正在使用 Python/Pyglet 和 openGL 编写游戏。我目前将其结构化,以便有一个名为“世界”的对象,其中是其他对象,其中包含其他对象等。我这样做是因为例如游戏的一部分是一个平台,上面有其他对象,当我倾斜平台时,我希望平台上的物体随之倾斜。所以我做了platform.draw(),它调用了glRotate、glTranslate,然后绘制了每个保存模型视图矩阵的对象,这样平台上的所有对象一起移动。第一个问题是,这是一种合理的组织方式还是我应该使用其他方法?

我没有相机课程,目前我只是在翻译整个世界或其中的一部分以产生运动的错觉。但是,将来我希望能够在对象之间切换视点,例如从从上方俯视世界切换到从世界中的一个对象的第一人称视图。所以第二个问题是什么是构建我的程序的最佳方式,以便将来可以实现?

4

2 回答 2

1

可能不是一个完整的答案,但我认为一个完整的答案需要一整本书......

您在层次结构中对世界的表示与通常称为“场景图”的非常相似,在许多情况下这是一个好主意。一个很好的例子就是Open Scene Graph

关于“翻译世界”,除非您真的每次都在变换所有顶点,否则也完全可以。这只是相对角度的问题,您真正拥有的与相机矩阵相同。您可以将转换视为将相机放置在世界中,或者将世界移动到相机前面。

于 2010-11-28T12:59:52.967 回答
0

您可以将逻辑放入单独的模块/单独的类/函数中。在我的 2D 游戏中,我有一个GameLogic类可以简化为某些事件注册它的方法或安排它们(以及取消注册+取消安排它们),我创建了一个@state_wrapper装饰器,它注入一个简单的新型对象作为该方法的状态存储。如果您这样做,您不必将指针传递给您的所有世界对象,只有事件方法必须访问您的对象。

但我不会声称这是最好的解决方案;)

于 2010-12-06T16:47:39.237 回答