python/pygame 图片闪烁解决方式

在写小游戏的时候,我在屏幕上加载了一个sprite,但是只有这个图片会一直闪烁,其他东西都很流畅。百度了一下竟然没人讲到相关的解决办法,于是在谷歌上搜了一下,发现有一个答案能解决我的问题。造成这个问题的原因很简单:程序中重复出现多个pygame.display.update()(或者pygame.display.flip() ),只能有一个。
这是我没有调整之前的部分代码,像这样的就会闪烁:

	framerate = pygame.time.Clock()
	group = pygame.sprite.Group()
	group.add(mysprite)
	framerate.tick(60)

while True:
		
		gf.check_events(ai_settings, screen, char, stats, sb, play_button, quit_button, background, enemies, mysprite)
		
		
		if stats.game_active:	
			gf.update_enemies(ai_settings, screen, sb, stats, char, background, enemies,  play_button, quit_button)
			
			ticks = pygame.time.get_ticks()
			group.update(ticks)
			group.draw(screen)
			
			
			pygame.display.update()

		gf.update_screen(ai_settings, screen, stats, sb, play_button, quit_button, aim, background, char, enemies, mysprite)

重点是上面循环体里面有一个pygame.display.update(),在update_screen里

要实现图片闪烁效果,可以使用pygame中的定时器以及透明度调节。 下面是一个简单的示例代码,演示了如何使用pygame实现图片闪烁的效果: ```python import pygame # 初始化pygame pygame.init() # 设置窗口尺寸和标题 screen_width, screen_height = 800, 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Image Blinking") # 加载图片 image = pygame.image.load("image.png") image_rect = image.get_rect() image_alpha = 255 # 初始透明度为255 # 设置定时器事件 BLINK_EVENT = pygame.USEREVENT + 1 pygame.time.set_timer(BLINK_EVENT, 500) # 设置500毫秒触发一次事件 # 游戏主循环 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == BLINK_EVENT: # 调整透明度 if image_alpha == 255: image_alpha = 0 else: image_alpha = 255 # 填充背景色 screen.fill((0, 0, 0)) # 绘制图片 image.set_alpha(image_alpha) screen.blit(image, image_rect) # 更新屏幕 pygame.display.flip() # 退出游戏 pygame.quit() ``` 在这个示例中,我们首先加载了一张图片,并设置了一个初始透明度为255。然后使用定时器每500毫秒触发一次自定义事件。在事件处理中,通过调整透明度来实现图片闪烁效果。最后,在主循环中绘制图片并更新屏幕,实现了图片闪烁的效果。 你可以将上述代码中的`"image.png"`替换为你自己的图片路径来测试。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值