该功能仅适用于包含打印语句的情况

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

我正在用 pygame 制作游戏,我遇到了从树上移除苹果的函数的问题。这个函数不处理创建苹果,只处理删除它们,但是只有当我在函数中有一个打印语句来删除苹果时,苹果才会出现。

我尝试用其他简单的语句替换 print 语句,例如创建变量,但它仅适用于 print 。 print('- hp') 是似乎需要的打印语句。 这是代码:

    def damage(self):

        # damaging the tree
        self.health -= 1
        print('- hp')
        # remove an apple
        if len(self.apple_sprites.sprites()) > 0:
            print('apple')
            random_apple = choice(self.apple_sprites.sprites())
            random_apple.kill()

这是创建苹果的函数:

    def create_fruit(self):
        for pos in self.apple_pos:
            if randint(0, 10) < 2:
                x = pos[0] + self.rect.left
                y = pos[1] + self.rect.top
                Generic((x, y), self.apple_surf, [self.apple_sprites, self.groups()[0]], z=LAYERS['fruit'])


这是 Damage() 和 create_fruit() 所在的类:

class Tree(Generic):
    def __init__(self, pos, surf, groups, name):
        super().__init__(pos, surf, groups)

        # tree attributes
        self.health = 5
        self.alive = True
        stump_path = f'../graphics/stumps/{"small" if name == "Small" else "large"}.png'
        self.stump_surf = pygame.image.load(stump_path).convert_alpha()
        self.invul_timer = Timer(200)


        # apples
        self.apple_surf = pygame.image.load('../graphics/fruit/apple.png').convert_alpha()
        self.apple_pos = APPLE_POS[name]
        self.apple_sprites = pygame.sprite.Group()
        self.create_fruit()

以及我称之为损坏函数的部分:

    def use_tool(self):
        if self.selected_tool == 'hoe':
            pass
        if self.selected_tool == 'axe':
            for tree in self.tree_sprites.sprites():
                if tree.rect.collidepoint(self.target_pos):
                    tree.damage()
        if self.selected_tool == 'water':
            pass

抱歉,我无法创建 MRE。

python pygame
1个回答
0
投票

我不知道为什么它有效,但是删除 print('- hp') 和 print('apple') 语句解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.