我正在用 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。
我不知道为什么它有效,但是删除 print('- hp') 和 print('apple') 语句解决了问题。