Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以显示pygame精灵的颜色变化?_Python_Pygame_Sprite - Fatal编程技术网

Python 是否可以显示pygame精灵的颜色变化?

Python 是否可以显示pygame精灵的颜色变化?,python,pygame,sprite,Python,Pygame,Sprite,我有一个pygame精灵,它是通过字体生成的。它只是一个16x16的表面,上面印着一封信,并以光点显示 精灵有一个定时器(这是一个通电),当它的生命接近尾声时,我希望它在每次更新时都随机闪烁一个颜色。我已经成功地在其他文本中实现了这一点,但该文本不是精灵,只是我放在记分板上的字符串。我想这是一样的,但一旦精灵生成,无论我如何更改精灵的颜色,更改都不会转换到屏幕上(尽管如果我print(self.color)我可以在控制台中看到更新的颜色元组) 我尝试过在类内放置随机颜色选择器,也尝试过在我的wh

我有一个pygame精灵,它是通过字体生成的。它只是一个16x16的表面,上面印着一封信,并以光点显示

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

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

这是我的项目类

类项目(pygame.sprite.sprite):
定义初始(自我、姓名、职位):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.name=名称
self.image=pygame.Surface([16,16])
self.image.set_颜色键(黑色)
self.font=pygame.font.font(“./font/myfont.ttf”,16)
self.pos=pos
如果self.name==“运行状况”:
self.color=(255,0,0)
self.text=self.font.render(“H”,True,self.color)
自我寿命=200
self.lifespance_计数器=0
self.image.blit(self.text,(0,0))
def更新(自我):
#更新计时器
自身寿命_计数器+=0.1
如果self.lifespan\u计数器>=self.lifespan:
self.kill()
#更新位置
self.rect.center=(int(self.pos[0]),int(self.pos[1]))
然后在while循环中的
defmain()
的底部,我有以下内容:

随机颜色计数器+=1
如果随机颜色计数器>3:
随机颜色=获取随机颜色()
随机颜色计数器=0
屏幕填充(背景)
文本框填充(蓝色)
游戏盒填充(白色)
#更新精灵的位置,然后将其绘制到游戏盒表面
player_sprites.update()
玩家\u子弹\u精灵。更新()
敌人精灵更新()
敌人\子弹\精灵。更新()
项目_sprites.update()
玩家\精灵。抽签(游戏箱)
玩家\子弹\精灵。抽签(游戏箱)
敌方精灵。抽签(游戏盒)
敌人\子弹\精灵。抽签(游戏箱)
物品\u精灵。抽签(游戏盒)
...
对于项目_精灵中的i:
游戏盒blit(i.image,(int(i.pos[0]),int(i.pos[1]))
#刷新一切
pygame.display.update()
这就是选择新颜色的函数

def get_random_color():
r=random.randint(0255)
g=random.randint(0255)
b=random.randint(0255)
返回r,g,b
然后我可以用颜色
random\u color
来处理大多数事情,只是不能用精灵


就像我说的,这显示精灵在它应该显示的位置(坏蛋死亡的地方)很好,但我似乎无法更改项目精灵颜色转换到屏幕上。我只是看不出我做错了什么。

如果要更改文本的颜色,必须再次渲染文本并更新文本表面。写一个
change\u color
方法:

类项目(pygame.sprite.sprite):
# [...]
def更改颜色(自身,颜色):
self.image=pygame.Surface([16,16])
self.image.set_颜色键(黑色)
self.color=颜色
self.text=self.font.render(“H”,True,self.color)
self.image.blit(self.text,(0,0))

“无论我如何更改精灵的颜色,更改都不会转化为屏幕”-您在哪里尝试“更改”颜色。我在你的问题中找不到这部分代码。我尝试的一切都失败了。根据你上面看到的,我应该采取什么样的最佳方法来实现这一点?你会怎么做?你必须用新的颜色来渲染文本。你必须在你的问题中展示你的尝试。很好。我没有尝试重新渲染文本!它在init上渲染,然后终身保持相同的颜色。我假设一旦它变成精灵,我就可以控制精灵的颜色。看来我问了一个好问题,因为我得到了一个好的,简单的答案。非常感谢。非常有帮助。不,你的问题不“好”。我得猜你想要什么。我只能猜测,因为我读了很多像这样的不完整的问题,这是一个常见的问题。