玩家和敌人之间的碰撞检测不起作用

问题描述 投票:0回答:1

我目前正在开发一款自上而下的射击游戏,其中玩家处于固定位置,敌人从随机坐标进入。然而,敌人与玩家之间的碰撞不起作用。我想知道是否有人可以帮忙。 (我不太擅长编码)。如有任何帮助,我们将不胜感激,谢谢。

代码:

玩家等级:

class Player(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = character
        self.rect = self.image.get_rect()
    def drawPlayer(self, image, angle, position):
        player=pygame.transform.rotate(image, angle)
        pRect=player.get_rect(center=position)
        screen.blit(player, pRect)

敌方类别:

class Mob(pygame.sprite.Sprite):
    def __init__(self, start_x, start_y, dest_x, dest_y):
        
        pygame.sprite.Sprite.__init__(self)
        self.image = badguy

        self.rect = self.image.get_rect()

        self.rect.x = start_x
        self.rect.y = start_y

        self.floating_point_x = start_x
        self.floating_point_y = start_y

        x_diff = dest_x - start_x
        y_diff = dest_y - start_y
        angle = math.atan2(y_diff, x_diff);

        velocity = random.randrange(1,3)
        self.change_x = math.cos(angle) * velocity
        self.change_y = math.sin(angle) * velocity
        pygame.display.flip()

    def update(self):
        
        self.floating_point_y += self.change_y
        self.floating_point_x += self.change_x

        self.rect.y = int(self.floating_point_y)
        self.rect.x = int(self.floating_point_x)

碰撞部分:

    all_sprites_list.update()

    hits = pygame.sprite.spritecollide(player, mobs, True)
    if hits:
        running = False
python pygame collision
1个回答
2
投票

pygame.sprite.groupcollide()
使用
.rect
对象的
pygame.sprite.Sprite
属性来进行碰撞测试。因此,您必须更新
self.rect
属性,而不是使用局部变量
pRect
:

class Player(pygame.sprite.Sprite):
    # [...]

    def drawPlayer(self, image, angle, position):
        player = pygame.transform.rotate(image, angle)
        self.rect = player.get_rect(center = position)
        screen.blit(player, self.rect)
© www.soinside.com 2019 - 2024. All rights reserved.