目录
一、优化过程分析
1、pygame - 图片移动中图片移动模式
2、优化过程
二、代码段
1、附注释
2、无注释
三、效果展示
一、优化过程分析
1、pygame - 图片移动中图片移动模式
按一次方向键,图片移动一小步;
若需要一直往某个方向移动,则需要反复按方向键
2、优化过程
(1)将move()函数放在while True循环当中,并且处在循环最外层的位置;
(2)设置图片移动开关stop防止程序一运行图片就移动;
(3)将循环获取事件并监听事件状态写成GetEvent()函数;
(4)在GetEvent()函数中根据方向键的状态修改stop和direction;
(5)导入time模块,使用time.sleep()使得循环速度变慢,从而使得图片移动速度变慢;
(6)将stop和direction设定为全局变量,并注意global的使用;
(7)因没有使用global出现bug,特写文记录——变量作用域和关键字global
二、代码段
1、附注释
import sys
import time
import pygame
pygame.init()
# 使用pygame之前必须初始化
LENGTH = 1000 # 主屏窗口长度
WIDTH = 680 # 主屏窗口宽度
screen = pygame.display.set_mode((LENGTH, WIDTH)) # 设置主屏窗口
# 说明:set_mode()可以短时间显示主屏窗口
pygame.display.set_caption("图片移动优化测试") # 设置窗口标题
# 说明:若不设置窗口标题,则窗口标题默认为“pygame window”
img = pygame.image.load("t02_img.png") # 加载本地图片
rect = img.get_rect() # 获取图片区域
rect.x = 500 # 设置显示位置
rect.y = 340 # 设置显示位置
stop = True # 图片移动开关
direction = 'U' # 图片移动方向
def move(): # 图片移动函数
# 说明:图片移动实质是改变rect.top或rect.left,并确保图片不会移出主屏窗口
speed = 5 # 移动速度
if rect.top - speed >= 0 and direction == 'U': # 上
rect.top -= speed
elif rect.top + rect.height + speed <= WIDTH and direction == 'D': # 下
rect.top += speed
elif rect.left - speed >= 0 and direction == 'L': # 左
rect.left -= speed
elif rect.left + rect.width + speed <= LENGTH and direction == 'R': # 右
rect.left += speed
def GetEvent(): # 获取事件函数
global stop
global direction
# 注意global的使用
for event in pygame.event.get(): # 循环获取事件并监听事件状态
if event.type == pygame.KEYDOWN: # 按下了按键
if event.key == pygame.K_UP: # 上
stop = False
direction = 'U'
elif event.key == pygame.K_DOWN: # 下
stop = False
direction = 'D'
elif event.key == pygame.K_LEFT: # 左
stop = False
direction = 'L'
elif event.key == pygame.K_RIGHT: # 右
stop = False
direction = 'R'
elif event.type == pygame.KEYUP: # 松开了按键
if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
stop = True
elif event.type == pygame.QUIT: # 点击了关闭按钮
pygame.quit() # 卸载模块
sys.exit() # 退出程序
while True:
# 说明:while True循环可以使得主屏窗口得以保留
time.sleep(0.02) # 使得循环速度变慢,从而使得图片移动速度变慢
screen.fill((0, 0, 0)) # 填充
GetEvent() # 获取事件
if not stop:
move() # 图片移动
screen.blit(img, rect) # 传送
pygame.display.update() # 更新
2、无注释
import sys
import time
import pygame
pygame.init()
LENGTH = 1000
WIDTH = 680
screen = pygame.display.set_mode((LENGTH, WIDTH))
pygame.display.set_caption("图片移动优化测试")
img = pygame.image.load("t02_img.png")
rect = img.get_rect()
rect.x = 500
rect.y = 340
stop = True
direction = 'U'
def move():
speed = 5
if rect.top - speed >= 0 and direction == 'U':
rect.top -= speed
elif rect.top + rect.height + speed <= WIDTH and direction == 'D':
rect.top += speed
elif rect.left - speed >= 0 and direction == 'L':
rect.left -= speed
elif rect.left + rect.width + speed <= LENGTH and direction == 'R':
rect.left += speed
def GetEvent():
global stop
global direction
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
stop = False
direction = 'U'
elif event.key == pygame.K_DOWN:
stop = False
direction = 'D'
elif event.key == pygame.K_LEFT:
stop = False
direction = 'L'
elif event.key == pygame.K_RIGHT:
stop = False
direction = 'R'
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
stop = True
elif event.type == pygame.QUIT:
pygame.quit()
sys.exit()
while True:
time.sleep(0.02)
screen.fill((0, 0, 0))
GetEvent()
if not stop:
move()
screen.blit(img, rect)
pygame.display.update()
三、效果展示
pygame图片移动优化测试 20230107