鱼C论坛

 找回密码
 立即注册
查看: 1674|回复: 3

[已解决]用pygame写的一个小人走动,图片切换时会闪是怎么回事?

[复制链接]
发表于 2021-8-17 18:21:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小菜鸟FLY 于 2021-8-17 18:32 编辑

按住键盘上的A/D是左右移动,持续按住时会切换图片,以此来达到“走路”的动作,但是不管我怎么调帧数,还是会有闪烁,各位大神给支个招?
  1. import pygame
  2. from pygame.locals import *
  3. import sys
  4. import traceback

  5. pygame.init()

  6. bg_size = width,height = 1000,400
  7. screen = pygame.display.set_mode(bg_size)
  8. pygame.display.set_caption('2021.8.17')

  9. background_photo = pygame.image.load('bg_1000×400.png').convert()  


  10. class Man(pygame.sprite.Sprite):
  11.     def __init__(self,bg_size):
  12.         pygame.sprite.Sprite.__init__(self)

  13.         self.image1 = pygame.image.load('stand_100×200 .png').convert_alpha()
  14.         self.image2 = pygame.image.load('walk_1_100×200.png').convert_alpha()
  15.         self.image3 = pygame.image.load('walk_2_100×200.png').convert_alpha()

  16.         #获取插入图的限定矩形
  17.         self.rect = self.image1.get_rect()
  18.         #背景图的长和高
  19.         self.width,self.height = bg_size[0],bg_size[1]
  20.         #设置初始位置在左下角
  21.         self.rect.left,self.rect.top = (0,self.height - self.rect.height)
  22.         
  23.         self.speed = 2

  24.     def walk_left(self):
  25.         if self.rect.left > 0:
  26.             self.rect.left -= self.speed
  27.         else:
  28.             self.rect.left = 0

  29.     def walk_right(self):
  30.         if self.rect.right < 1000:
  31.             self.rect.right += self.speed

  32. def main():
  33.     #设置帧数
  34.     clock = pygame.time.Clock()
  35.    
  36.     man = Man(bg_size)

  37.     delay = 100

  38.     switch_image = 2

  39.     r_head1 = man.image1
  40.     r_head2 = man.image2
  41.     r_head3 = man.image3
  42.     l_head1 = pygame.transform.flip(man.image1,True,False)
  43.     l_head2 = pygame.transform.flip(man.image2,True,False)
  44.     l_head3 = pygame.transform.flip(man.image3,True,False)

  45.     head1 = r_head1

  46.     while True:
  47.         for event in pygame.event.get():
  48.             if event.type == QUIT:
  49.                 pygame.quit()
  50.                 sys.exit()

  51.         #绘制图片
  52.         screen.blit(background_photo,(0,0))

  53.         
  54.         key_pressed = pygame.key.get_pressed()
  55.         if not (key_pressed[K_a] or key_pressed[K_d]):
  56.             screen.blit(head1,man.rect)
  57.         
  58.         if key_pressed[K_a]:
  59.             man.walk_left()
  60.             head1 = l_head1
  61.             if switch_image == 2:
  62.                 screen.blit(l_head2,man.rect)
  63.             elif switch_image == 1:
  64.                 screen.blit(l_head3,man.rect)
  65.             else:
  66.                 switch_image = 2
  67.         if key_pressed[K_d]:
  68.             man.walk_right()
  69.             head1 = r_head1
  70.             
  71.             if switch_image == 2:
  72.                 screen.blit(r_head2,man.rect)
  73.             elif switch_image == 1:
  74.                 screen.blit(r_head3,man.rect)
  75.             else:
  76.                 switch_image = 2

  77.         
  78.         

  79.         #切换图片
  80.         if not(delay % 5):
  81.             switch_image -= 1
  82.         delay -=1
  83.         if not delay:
  84.             delay = 20

  85.         pygame.display.flip()
  86.         clock.tick(60)

  87. if __name__ == '__main__':
  88.     try:
  89.         main()
  90.     except SystemExit:  #正常退出,抛出异常,然后跳过
  91.         pass
  92.     except:
  93.         #在双击打开程序时,若有异常,打印异常,退出
  94.         traceback.print_exc()  
  95.         pygame.quit()
  96.         input()   
复制代码

哎呀,还没权限,怎么上传图片文件呀?好烦那
最佳答案
2021-8-18 08:20:02
厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-17 18:22:54 | 显示全部楼层
咋上传文件,这个代码引用了四张图,上传不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 18:29:30 | 显示全部楼层
解决了,间隔的时间中没有图片,和背景之间有差异,导致闪动。
改进办法,让一张图片停留到下一张切换就不会有闪动了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 08:20:02 | 显示全部楼层    本楼为最佳答案   
厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表