Обнаружение столкновения с пигейном для пушечного ядра - PullRequest
0 голосов
/ 11 октября 2011

На прошлой неделе я работал над игрой Cannon для класса.Наша текущая итерация заключается в добавлении цели и обнаружении столкновений.Из моего понимания функции pygame.draw возвращают объекты Rect.Я добавляю эти объекты в список и передаю этот список своему пушечному ядру.Cannonball затем использует этот список, чтобы определить, попал ли он в что-либо.Однако я получаю сообщение «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?

1 Ответ

0 голосов
/ 11 октября 2011

Объекты 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, и в опубликованном вами коде нет ничего, что указывало бы на получение значения "None".

Если приведенное выше исправление не работает, возможно, вам придется проверить оставшуюся часть кода класса, чтобы проверить, правильно ли вы вызываете функцию self.draw ().

...