For the past week I have been working on a Cannon Game for class. Our current iteration is to add a target and collision detection. From my understanding pygame.draw functions return Rect objects. I append these objects to a list and pass this list to my cannonball. Cannonball then uses that list to detect if it has hit anything. However I receive "if self.current_ball.Rect.collidelist(self.collision_objects) > -1: AttributeError: 'NoneType' object has no attribute 'Rect'" error.
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
I'm not quite sure if there is anything wrong with this code, or is it ac开发者_StackOverflow社区tually the issue with the collision_objects list?
Rect objects doesn't have Rect attributes. Try removing the .Rect attribute as follows:
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
There may be more than one problem here. As far as I could see self.current_ball should be a Rect object and there is nothing in the code you posted that suggests it receives "None".
If the correction above doesn't work, you may need to check the rest of the class code to check if you are calling the your self.draw() function properly.
精彩评论