[英]Is it possible to display a change of color to a pygame Sprite?
我有一個通過字體生成的 pygame Sprite。 它只是一個 16x16 的表面,上面印有一個字母並進行了 blitted。
精靈有一個計時器(它是一個電源),當它接近生命的盡頭時,我希望它在每次更新時為 flash 隨機顏色。 我已經成功地使用其他文本做到了這一點,但該文本不是精靈,只是我在記分板上傳遞的字符串。 我認為這將是相同的,但是一旦生成精靈,無論我改變精靈的顏色多少,改變都不會轉化為屏幕(盡管如果我print(self.color)
我可以看到更新的顏色控制台中的元組)。
我嘗試將隨機顏色選擇器放在 Class 內,並在我的 while 循環中嘗試在 class 之外。 我可以很容易地改變顏色,但屏幕上的精靈實際上並沒有改變。 我沒有使用外部 sprite 圖像,只是將字體設置為 pygame.Surface。
這是我的項目 class。
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()
這是選擇新顏色的 function。
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
用於大多數事情,但顯然不是精靈。
就像我說的那樣,這在 position 應該很好地顯示精靈(壞人死的地方),但我似乎無法更改項目精靈顏色轉換到屏幕上。 我只是沒有看到我做錯了什么。
當你想改變文本的顏色時,你必須再次渲染文本並更新文本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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.