pygame Sprite 精灵类移动出现模糊,留下移动痕迹问题解决方法
1、问题描述
当定义精灵类时,移动精灵,移动后会出现模糊,留下移动痕迹
正常定义的是一个小方块
移动后出现痕迹,模糊现象
代码
import pygame from pygame.locals import * class Player(pygame.sprite.Sprite): # 继承pygame.sprite.Sprite精灵对象 def __init__(self): super().__init__() self.surf = pygame.Surface((75, 25)) # 创建Surface平面对象 self.surf.fill('orange') # 填充橙色 self.rect = self.surf.get_rect() # 获取X,Y坐标和大小 print(f'rect:{self.rect}') # 不设置默认是0,0 self.rect.x = 300 # 重新设置X轴坐标 self.rect.y = 300 # 重新设置Y轴坐标 def update(self, pressed_keys): # print(f'pressed_keys:{pressed_keys}') if pressed_keys[K_UP]: # 如果按下的是方向上键 print('up') self.rect.move_ip(0, -5) # 更新rect的X,Y print(self.rect) if pressed_keys[K_DOWN]: # 如果按下的是方向下键 print('down') self.rect.move_ip(0, 5) # 更新rect的X,Y print(self.rect) if pressed_keys[K_LEFT]: # 如果按下的是方向左键 print('left') self.rect.move_ip(-5, 0) # 更新rect的X,Y print(self.rect) if pressed_keys[K_RIGHT]: # 如果按下的是方向右键 print('right') self.rect.move_ip(5, 0) # 更新rect的X,Y print(self.rect) pygame.init() # 初始化pygame screen = pygame.display.set_mode((800, 600)) # 创建窗口 screen.fill(color='white') # 为窗口填充白色 player = Player() # 创建Player对象 running = True clock = pygame.time.Clock() while running: for event in pygame.event.get(): # 获取所有事件 if event.type == KEYDOWN: # 获取按钮按下事件 if event.key == K_ESCAPE: # 如果是按下了ESC键 running = False if event.type == QUIT: # 如果是QUIT事件,如点击关闭窗口按钮 running = False clock.tick(100) pressed_key = pygame.key.get_pressed() player.update(pressed_key) # screen.fill(color='white') # 为窗口填充白色 screen.blit(player.surf, player.rect) # 放置player对象 pygame.display.flip() # 刷新整个平面
2、解决办法
在while循环中,填充背景颜色或者填充背景图片
只添加了红色字体 screen.fill(color='white') # 为窗口填充白色
import pygame from pygame.locals import * class Player(pygame.sprite.Sprite): # 继承pygame.sprite.Sprite精灵对象 def __init__(self): super().__init__() self.surf = pygame.Surface((75, 25)) # 创建Surface平面对象 self.surf.fill('orange') # 填充橙色 self.rect = self.surf.get_rect() # 获取X,Y坐标和大小 print(f'rect:{self.rect}') # 不设置默认是0,0 self.rect.x = 300 # 重新设置X轴坐标 self.rect.y = 300 # 重新设置Y轴坐标 def update(self, pressed_keys): # print(f'pressed_keys:{pressed_keys}') if pressed_keys[K_UP]: # 如果按下的是方向上键 print('up') self.rect.move_ip(0, -5) # 更新rect的X,Y print(self.rect) if pressed_keys[K_DOWN]: # 如果按下的是方向下键 print('down') self.rect.move_ip(0, 5) # 更新rect的X,Y print(self.rect) if pressed_keys[K_LEFT]: # 如果按下的是方向左键 print('left') self.rect.move_ip(-5, 0) # 更新rect的X,Y print(self.rect) if pressed_keys[K_RIGHT]: # 如果按下的是方向右键 print('right') self.rect.move_ip(5, 0) # 更新rect的X,Y print(self.rect) pygame.init() # 初始化pygame screen = pygame.display.set_mode((800, 600)) # 创建窗口 screen.fill(color='white') # 为窗口填充白色 player = Player() # 创建Player对象 running = True clock = pygame.time.Clock() while running: for event in pygame.event.get(): # 获取所有事件 if event.type == KEYDOWN: # 获取按钮按下事件 if event.key == K_ESCAPE: # 如果是按下了ESC键 running = False if event.type == QUIT: # 如果是QUIT事件,如点击关闭窗口按钮 running = False clock.tick(100) pressed_key = pygame.key.get_pressed() player.update(pressed_key) screen.fill(color='white') # 为窗口填充白色 screen.blit(player.surf, player.rect) # 放置player对象 pygame.display.flip() # 刷新整个平面
参考链接 https://fishc.com.cn/thread-169617-1-1.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示