在 Python pygame 中了解自我

Understanding self in Python pygame

你好,我是初学者 Python 开发平台 pygame 游戏的程序员,在查看 http://programarcadegames.com/python_examples/en/sprite_sheets/ 的一些代码时,有一个关于播放器的特定部分 class 我不明白。

来自播放器class第102行有一段代码

    block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)

既然platform_list没有在这个class中声明,怎么可能是这样使用的呢?另外,怎么可能做到level.platform_list?我试过上面提到的网站上的代码,它运行良好,但我不明白它是如何工作的。谁能给我解释一下?谢谢!

在播放器class中第37-38行左右初始化为None。

# List of sprites we can bump against
self.level = None 

在第 13 行定义了 Player class。在它的 __init__ 方法中,在第 39 行,它的 level 属性被初始化为 None。推测该属性后来被更改,因为它在第 104 行用于获取其 platform_list 属性:block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)

正如@zondo 所说,Player class 定义了 level 属性并将其初始化为 None.

他的回答中缺少的步骤是 platform_scroller.py 中的 main() 在第 57 行用当前水平填充它。因为这是 Level class,它有一个 platform_list 属性,可以通过 Player 对象内的 self.level.platform_list 访问。