簡體   English   中英

為什么我的精靈不能用 kill() function 正確刪除?

[英]Why won't my sprites delete properly with the kill() function?

我正在創建一個游戲,您可以在其中以自上而下的格式射擊敵人。 我的子彈和敵人 function 在各個方面都正確,除非它必須自行刪除。 我已經將它連接到如果子彈與敵人相撞或經過 5 秒,子彈會自行刪除的位置。 它確實這樣做了,除了代碼不斷迭代以創建一個精靈並在子彈由於某種原因移動時殺死它,並且仍然在屏幕上顯示子彈,就好像它什么也沒發生一樣。 有人能告訴我為什么代碼會重復創建子彈並刪除它這么多次嗎?

- - - - 代碼 - - - -

播放器 class 中的方法

def shoot(self):
    pos = pygame.mouse.get_pos()
    pos += camera_group.offset
    click = pygame.mouse.get_pressed()
    if click[0] and not self.shooting:
        self.shooting = True
        # create bullet instance if player shoots
        bullet = Bullet(self.rect.centerx, self.rect.centery, "bullet", pos, camera_group)
        bullet_group.add(bullet)

    if not click[0]:
        self.shooting = False

子彈 class

class Bullet(Entity):
def __init__(self, x, y, image, pos, group):
    super().__init__(x, y, image, group)
    pygame.sprite.Sprite.__init__(self)
    # creating and scaling image
    self.image = pygame.transform.flip(self.image, True, False)
    self.image = pygame.transform.scale(self.image, (32, 16))
    # creating rect
    self.x = x
    self.y = y
    self.speed = 8
    self.mousepos = pos
    # calculating angle of bullet
    self.angle = math.atan2(pos[1] - y, pos[0] - x)
    self.angle_deg = (self.angle * (180 / math.pi))
    self.image = pygame.transform.rotate(self.image, self.angle_deg * -1)
    # calculating vel_x/vel_y
    dx = self.mousepos[0] - player.rect.centerx
    dy = self.mousepos[1] - player.rect.centery
    total = abs(dx) + abs(dy)
    self.vel_x = (self.speed * (dx / total))
    self.vel_y = (self.speed * (dy / total))
    # setting variable to store time of bullet creation
    self.start_time = pygame.time.get_ticks()

def update(self):
    if pygame.time.get_ticks() - self.start_time > 50 and len(bullet_group) >= 1:
        bullet_group.sprites()[0].kill()

    elif self.rect.colliderect(enemy):
        bullet_group.sprites()[0].kill()
        enemy.kill()

    else:
        # movement
        self.x += self.vel_x
        self.y += self.vel_y
        self.rect.x = int(self.x)
        self.rect.y = int(self.y)

不要殺死Group中的第一個子彈,只刪除子彈 object 本身:

bullet_group.sprites()[0].kill()

self.kill()

class Bullet中的方法update

class Bullet(Entity):
    # [...]

    def update(self):
        if pygame.time.get_ticks() - self.start_time > 50 and len(bullet_group) >= 1:
            self.kill()

        elif self.rect.colliderect(enemy):
            self.kill()
            enemy.kill()

        else:
            # movement
            self.x += self.vel_x
            self.y += self.vel_y
            self.rect.x = int(self.x)
            self.rect.y = int(self.y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM