我正在编写一个平台游戏,并试图检查玩家是否在空中。如果是这样,它们会跌落直到接触平台,然后上升直到不再接触平台(这样它们才不会下沉)。为此,我要检查玩家的y位置(加上身高)是否大于平台的y位置(涉及整个“平台”类),但这不起作用:
这是平台的初始化代码:
class platform(object):
def __init__(self, x, y, size):
self.x = x
self.y = y
self.size = size
这是我指的地方:
def touchGround(self):
while self.hitbox[1] + self.hitbox[3] > platform.y:
self.speedY -= 1
self.y += speedY
def fall(self):
while self.hitbox[1] + self.hitbox[3] < platform.y:
self.speedY += 1
self.y += speedY
touchGround()
但是,我得到一个错误:
AttributeError: type object 'platform' has no attribute 'y'
答案 0 :(得分:0)
您需要创建platform
的实例才能使其具有y
属性。这是为什么会出现这种情况的简单示例:
class Something:
def __init__(self, x, y):
self.x = x
self.y = y
if Something.y > 2:
print('success')
根本没有定义任何值,因此进行任何形式的比较都是不合理的。我们可以通过以下方式解决此问题:
my_something = Something(1, 3)
if my_something.y > 2:
print('success')
或者,您可以通过定义类变量来解决它:
class Something:
x = 1
y = 3
if Something.y > 2:
print('success')
在您的情况下,我假设您将有多个平台,因此在类级别定义x
和y
可能没有意义,因为您需要具有不同属性的多个实例。
另外,请参阅rancher了解命名约定。这些对于清晰理解人与人之间的代码很重要。