在过去的一周里,我一直在上课。我们当前的迭代是添加目标和碰撞检测。从我的理解pygame.draw函数返回Rect对象。我将这些对象附加到列表中并将此列表传递给我的炮弹。然后炮弹使用该列表来检测它是否有任何击中。但是我收到“if self.current_ball.Rect.collidelist(self.collision_objects)> -1: AttributeError:'NoneType'对象没有属性'Rect'“错误。
def draw(self, screen):
'''
Draws the cannonball
'''
self.current_ball = pygame.draw.circle(screen, color["red"],(round(self._x),round(self._y)), 5)
return self.current_ball
def move(self):
'''
Initiates the cannonball to move along its
firing arc
'''
while self.active:
prev_y_v = self.y_v
self.y_v = self.y_v - (9.8 * self.time_passed_seconds)
self._y = (self._y - (self.time_passed_seconds * ((prev_y_v + self.y_v)/2)))
self._y = max(self._y, 0)
self._x += (self.delta_x)
#self.active = (self._y > 0)
self.collision_detect()
if self.collide == True:
self.active = False
def collision_detect(self):
'''
Detects if the current cannonball has collided with any object within the
collision_objects list.
'''
if self.current_ball.Rect.collidelist(self.collision_objects) > -1:
self.collide = True
我不确定此代码是否有任何问题,或者它实际上是collision_objects列表的问题?
答案 0 :(得分:0)
Rect对象没有Rect属性。尝试删除.Rect属性,如下所示:
def collision_detect(self):
'''
Detects if the current cannonball has collided with any object within the
collision_objects list.
'''
if self.current_ball.collidelist(self.collision_objects) > -1:
self.collide = True
这里可能存在多个问题。据我所知,self.current_ball应该是一个Rect对象,你发布的代码中没有任何内容表明它收到“无”。
如果上述更正不起作用,您可能需要检查其余的类代码,以检查您是否正确调用了self.draw()函数。