Pygame切换角色不同动画时精灵出现短暂闪烁消失问题求助
问题根因
你代码里的player_behaviour方法执行顺序错误,是导致松开按键时闪烁的核心原因:
当前逻辑是先执行idle动画绘制,再处理按键、修改idleanim状态,松开按键的那一帧会出现无绘制的空窗:
- 进入方法时
idleanim还是上一帧行走时设置的False,所以前面4个idle动画的绘制判断都不满足,不会绘制玩家精灵 - 走到按键判断的
else分支时,才把idleanim设为True,但此时已经过了idle动画的绘制逻辑 - 这一帧全程没有绘制玩家精灵,就会出现1帧的透明效果,肉眼看起来就是闪烁
修复方案
调整player_behaviour的逻辑顺序,先处理输入更新状态,再执行对应动画的绘制即可:
def player_behaviour(self): # 第一步:先处理输入,更新所有状态变量 if key_pressed[pygame.K_RIGHT]: self.posX += self.speed self.idleanim = False self.dir_x = 1 self.dir_y = 0 elif key_pressed[pygame.K_LEFT]: self.posX += -self.speed self.idleanim = False self.dir_x = -1 self.dir_y = 0 elif key_pressed[pygame.K_UP]: self.posY += -self.speed self.idleanim = False self.dir_y = -1 self.dir_x = 0 elif key_pressed[pygame.K_DOWN]: self.posY += self.speed self.idleanim = False self.dir_y = 1 self.dir_x = 0 else: self.idleanim = True # 可选优化:切换到idle动画时重置帧索引,避免动画跳帧 # self.current_sprite = 0 # 第二步:状态更新完成后,再执行对应动画的绘制 if self.idleanim: self.animation(1, 0, self.idle_right_frames) self.animation(0, -1, self.idle_front_frames) self.animation(0, 1, self.idle_back_frames) self.animation(-1, 0, self.idle_left_frames) else: self.animation_walking(1, 0, self.walking_right_frames) self.animation_walking(-1, 0, self.walking_left_frames) self.animation_walking(0, -1, self.walking_back_frames) self.animation_walking(0, 1, self.walking_front_frames)
内容的提问来源于stack exchange,提问作者icekete
相关产品推荐
相关产品推荐

