簡體   English   中英

是否可以顯示 pygame Sprite 的顏色變化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM