Столкновение с прямоугольником Pygame не работает для любых спрайтов в Pygame - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю шутер, и в моей игре я хочу, чтобы, как только игрок столкнулся с коробкой утилит, ящик утилит сбросил все ваши боеприпасы и пистолет, а затем упал в воду и исчез.Но у меня много проблем с коллизиями, потому что они либо происходят не в том месте, либо не происходят, когда игрок касается коробки с утилитой.

Я уже пробовал типичную проверку коллизий.И заставили консоль или оболочку в этом случае распечатать True, и он никогда не распечатывал ее.

class Player:
    def __init__(self, x, y, pic_one):
        self.xpos = x
        self.ypos = y
        self.speed_y = 0
        self.speed_x = 0 
        self.GRAVITY = 0.9
        self.picture = pic_one

        self.rect = self.picture.get_rect()
        self.rect.x = self.xpos
        self.rect.y = self.ypos



    def draw(self):
        screen.blit(self.picture, (self.xpos, self.ypos))

    def is_collided_with(self, sprite):
        return self.rect.colliderect(sprite.rect)



class Box():
    def __init__(self, x, y, box_picture):
        self.xpos = x
        self.ypos = y
        self.speed_y = 0
        self.speed_x = 0
        self.picture = box_picture
        self.picture = pygame.transform.scale(self.picture, (60, 60))
        self.rect = self.picture.get_rect()
        self.rect = self.rect.inflate(70, 70)

    def update(self):             
        self.xpos += self.speed_x 
        self.ypos += self.speed_y

    def draw(self):
        screen.blit(self.picture, (self.xpos, self.ypos))

    def is_collided_with(self, sprite):
        return self.rect.colliderect(sprite.rect)


default_box = Box(500, 350, box_pic)        
player_one = Player(400, 200, player_one_first_pic)

while True:
    [...]
    if player_one.is_collided_with(default_box):
        print(True)
    else:
        print(False)

issue Ожидаемые результаты состоят в том, что как только игрок столкнется с полем, он напечатает True, а если нет - False.

Вот диаграмма, которую я имею в виду. На этой диаграмме она должна просто напечатать True, а вместо этого вывести False

...