我在main.py
中有一些代码:
import pygame, char
def move(char):
#movement code
#friction
if char.xaccel == 0:
if abs(char.xvel) < char.xvelfalloff: char.xvel = 0
elif abs(char.xvel) == char.xvel: char.xvel -= char.xvelfalloff
elif abs(char.xvel) != char.xvel: char.xvel += char.xvelfalloff
#acceleration
char.xvel += char.xaccel
#max speed
if abs(char.xvel) > char.xmaxvel: char.xvel = math.copysign(char.xmaxvel,char.xvel)
#position/collision detection
char.x += char.xvel
char.xaccel = 0
char.yaccel = char.ygravity
char.yvel += char.yaccel
char.y += char.yvel
if char.y < 0: #TODO: more collision detection
char.yvel = 0
char.y = 0
char.onground = True
if char.jumping:
char.yvel = char.jumpstrength
char.jumping = False
char.onground = False
#no more movement code
charObj = char.Char()
charObj = move(charObj)
screen.blit(char.currentanimation, pygame.Rect(char.x, (screen_height-char.y)-char.height, char.width, char.height))
pygame.display.flip()
以及char.py
中的一些代码:
请注意,我在这里删掉了所有不相关的内容。 所以,当我运行这段代码时,我得到了一个错误:
Traceback (most recent call last):
File "C:\Users\spng453\scripts\super smash feminist\main.py", line 90, in <module>
screen.blit(char.currentanimation, pygame.Rect(char_x, (screen_height-char_y)-char_height, char_width, char_height))
AttributeError: 'module' object has no attribute 'currentanimation'
我真的不知道我哪里会出错。 如果能帮助我们理解这个问题的根源,我们将不胜感激。在
如果将类定义为具有属性(即
self.currentanimation
),则可以按如下方式访问它:您在代码中所做的是查看模块} :-)
char
,而不是Char(charObj
)的内部。char
模块没有名为currentanimation
的属性/变量/etc。但是Char
的实例会这样做——或者,更确切地说,一旦您在类定义中定义了一个__init__()
方法,并开始使用^{有关设置和访问属性的更多信息,请看this section of the docs。在
相关问题 更多 >
编程相关推荐