是否可以将颜色更改显示为pygame精灵



我有一个pygame精灵,它是通过Font生成的。这只是一个16x16的表面,上面印着一个字母,并用闪电打了一下。

精灵有一个定时器(它是通电的(,当它的寿命接近尾声时,我希望它在每次更新时都闪烁一种随机的颜色。我已经成功地用其他文本做到了这一点,但该文本不是一个精灵,只是我闪电般地在记分板上输入的一个字符串。我认为这是一样的,但一旦生成精灵,无论我对精灵的颜色做了多少更改,更改都不会转化为屏幕(尽管如果我print(self.color),我可以在控制台中看到更新的颜色元组(。

在while循环中,我尝试过将随机颜色选择器放在类内部,也尝试过在类外部。我可以很容易地改变颜色,但屏幕上的精灵实际上并没有改变。我没有使用外部精灵图像,只是一个字体闪电战到pygame。表面

这是我的项目类。

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]))

然后在while循环的def main()的底部,我有这样的东西:

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颜色,只是显然不是精灵。

正如我所说,这将精灵显示在它应该显示的位置(坏蛋死亡的地方(,但我似乎无法将精灵颜色转换到屏幕上。我只是没有意识到我做错了什么。

如果要更改文本的颜色,则必须再次渲染文本并更新文本Surface。编写change_color方法:

class Item(pygame.sprite.Sprite):
# [...]
def change_color(self, color):
self.image = pygame.Surface([16, 16])
self.image.set_colorkey(black)
self.color = color
self.text = self.font.render("H", True, self.color)
self.image.blit(self.text, (0, 0))

最新更新