python - 我应该将我的游戏放在 pygame 类中吗?

标签 python class pygame game-development

我刚刚开始学习 pygame,而且我也不是 Python 专家。但是当我制作游戏时,我应该像 Tkinter 那样将游戏放在一个类中吗?我看过的教程都没有这样做,但我有点喜欢拥有类变量,而不必担心全局变量或返回值。有明显的优点或缺点吗?谢谢。

最佳答案

不 - 你不应该把整个游戏放在一个类中,除非它有意义。 我认为编写这些 2d 游戏是学习 OO 编程的最佳形式之一,这意味着您将在游戏设计中感到舒适时使用类和继承 - 而不仅仅是为了它。

Pygame 是一个不需要(有时不允许)您通过类继承来完成工作的模块。例如,如果您尝试从 Pygame 的 Surface 类继承,您将发现您的自定义类无法作为参数传递给需要 Surface 的函数。

但是,Pygame 是为您设计的,可以继承一个类:pygame.sprite.Sprite。只要您在代码中使用 pygame.sprite.Group 及其派生对象容器(而不是列表、集合或字典)​​, Sprite 就可以很好地工作。如果您有一个类层次结构,您还可以自己发现 OO 编程可以提供的许多细节 游戏中显示的所有对象,作为 pygame.sprite.Sprite 的子类。例如,所有物体、敌人、主角、镜头等......都需要有属性来记录它们的屏幕位置。但例如,只有敌人在被摧毁时才需要“point_value”。通过适当的类继承,您可以最大限度地减少所需的代码量。

但是为了控制游戏场景中的所有内容,Pygame 不提供基类 - 您必须创建自己的游戏循环,这很可能位于函数中 - 或者在您自己创建的类中,这不会从任何其他 Pygame 类继承。

例如,here我布置了一些代码作为“塔战略”游戏的基础。检查场景中的所有对象是否自然地从 BaseTowerTower 对象派生。

关于python - 我应该将我的游戏放在 pygame 类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958626/

相关文章:

python - 为支持子类的 Callable 类型提示?

python - Django 模型类和自定义属性

java - 将类作为 java 中方法的参数传递

c# - .NET 项目引用 : How to reference a dll via a referenced project?

python - 在pygame中禁用抗锯齿

python - 用python模拟处理?

python - 无法在 Eclipse 中创建 python View

python - 从一开始就使用一元/二进制数据创建 csr_matrix

python - Kullback-Leibler 散度从高斯 pm,pv 到高斯 qm,qv

python - 如何在 Pygame 中以一定的公差检查某些屏幕颜色?