【发布时间】:2021-06-03 03:10:32
【问题描述】:
我有一个通过 Font 生成的 pygame Sprite。它只是一个 16x16 的表面,上面印有一个字母并进行了 blitted。
精灵有一个计时器(它是一个电源),当它接近生命的尽头时,我希望它在每次更新时闪烁随机颜色。我已经成功地使用其他文本做到了这一点,但该文本不是精灵,只是我在记分板上传递的字符串。我认为这将是相同的,但是一旦生成了精灵,无论我如何更改精灵的颜色,更改都不会转化为屏幕(尽管如果我 print(self.color) 我可以在控制台)。
我已经尝试将随机颜色选择器放在类中,并在我的 while 循环中尝试在类之外。我可以很容易地改变颜色,但屏幕上的精灵实际上并没有改变。我没有使用外部精灵图像,只是使用 pygame.Surface 的字体。
这是我的物品类别。
class Item(pygame.sprite.Sprite):
def __init__(self, name, pos):
pygame.sprite.Sprite.__init__(self)
self.name = name
self.image = pygame.Surface([16, 16])
self.image.set_colorkey(black)
self.font = pygame.font.Font("./fonts/myfont.ttf", 16)
self.pos = pos
if self.name == "health":
self.color = (255, 0, 0)
self.text = self.font.render("H", True, self.color)
self.lifespan = 200
self.lifespan_counter = 0
self.image.blit(self.text, (0, 0))
def update(self):
# Update timer
self.lifespan_counter += 0.1
if self.lifespan_counter >= self.lifespan:
self.kill()
# Update position
self.rect.center = (int(self.pos[0]), int(self.pos[1]))
然后在我的 def main() 底部的 while 循环中,我有这些东西:
random_color_counter += 1
if random_color_counter > 3:
random_color = get_random_color()
random_color_counter = 0
screen.fill(background)
text_box.fill(blue)
game_box.fill(white)
# Update the sprites positions and then draw them to game_box surface
player_sprites.update()
player_bullet_sprites.update()
enemy_sprites.update()
enemy_bullet_sprites.update()
item_sprites.update()
player_sprites.draw(game_box)
player_bullet_sprites.draw(game_box)
enemy_sprites.draw(game_box)
enemy_bullet_sprites.draw(game_box)
item_sprites.draw(game_box)
...
for i in item_sprites:
game_box.blit(i.image, (int(i.pos[0]), int(i.pos[1])))
# Refresh everything
pygame.display.update()
这是选择新颜色的函数。
def get_random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return r, g, b
然后我可以在大多数情况下使用颜色 random_color,只是显然不是精灵。
就像我说的那样,这会在它应该的位置(坏人死亡的地方)很好地显示精灵,但我似乎无法将项目精灵的颜色更改为转换到屏幕上。我只是没有看到我做错了什么。
【问题讨论】:
-
" 无论我如何更改精灵的颜色,更改都不会转化为屏幕" - 你在哪里尝试“更改”颜色。我在您的问题中找不到这部分代码。
-
我尝试的一切都不成功。根据您在上面看到的内容,我应该采取的最佳方法是什么?你会怎么做?
-
你必须用新的颜色渲染文本。您必须在问题中显示尝试。
-
非常好。我没有尝试重新渲染文本!它在初始化时渲染,然后终生保持相同的颜色。我假设一旦它变成一个精灵,我就可以控制精灵的颜色。看起来我确实问了一个很好的问题,因为我得到了一个很好、简单的答案。非常感谢。很有帮助。
-
不,你的问题不是“好”。我不得不猜你想要什么。我只能猜测,因为我阅读了很多类似这样的不完整问题,这是一个常见问题。