# 导入函数库
import pygame
import sys
pygame.init() # 初始化
# 设定 窗口大小
screen_width = 500
screen_height = 500
# 建立窗口
s = pygame.display.set_mode((screen_width,screen_height))
# 获取窗口矩形
s_rect = s.get_rect()
# 获取窗口的四边
s_top = s_rect.top # 类型 int
s_bottom = s_rect.bottom # 类型 int
s_left = s_rect.left # 类型 int
s_right = s_rect.right # 类型 int
# 窗口命名
pygame.display.set_caption('移动小飞机')
# 载入图片
image1 = pygame.image.load("pictures/own/My.png")
# 获取图片的矩形
image1_rect = image1.get_rect()
image1_width = image1.get_width() # 类型 int
image1_height = image1.get_height() # 类型 int
# 设定 图片刚描绘进窗口时的位置
# 窗口左上角为 (0,0) 向左向右增加
# 图片位置由图片左上角位置决定(x,y)
x = screen_width/2-image1_width/2
y = screen_height-image1_height
# 图片的移动速度
speed = [5,5] # x , y
# 使程序能够持续响应按键,(一直按则一直向左或向右),如果没有,则按一下动一下,()中的是延时
pygame.key.set_repeat(18)
# 循环使窗体持续存在,直到我们选择关闭窗体
while True:
# 获取,判断,事件
for event in pygame.event.get():
# 使窗体能够退出
if event.type == pygame.QUIT:
sys.exit() # 源于 sys 库
# 判断按键,并执行相应操作
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x -= speed[0]
# 这个 if 判断 使图片在刚好完全进入窗体左侧时转移到窗体右侧
if x <= s_left - image1_width:
x = s_rect.right
elif event.key == pygame.K_d:
x += speed[0]
# 这个 if 判断 使图片在刚好完全进入窗体右侧时转移到窗体左侧
if x >= s_rect.right:
x = s_rect.left-image1_width
elif event.key == pygame.K_w:
y -= speed[1]
# 这个 if 判断 使图片在刚好完全进入窗体上方时转移到窗体下方
if y <= s_top-image1_height:
y = s_bottom
elif event.key == pygame.K_s:
y += speed[1]
# 这个 if 判断 使图片在刚好完全进入窗体下方时转移到窗体上方
if y >= s_bottom:
y = s_top-image1_height
s.fill((255,255,255)) # 填充背景色 (白)
s.blit(image1,(x,y)) # 描绘我们载入的图片
pygame.display.flip() # 刷新屏幕
我翻了一整天的文章,发现大多数移动图像的方式都有几个问题
1.一旦动起来就停不下来了(除非,靠边),
2.键盘只是决定移动的方向而不是决定是否移动,
(另外我发现,........它们好像一个模子里刻出来的,有的人的变量都少了一部分)
我这个版本没有以上问题
我这个版本存在的问题是:(a左,d右,w上,s下)
举例:先向左移动,按住a键不松,再按d键,图片会向右移动,但是松开d键,图片会不动(此时a键仍然未松开)
我的解决思路是 : 加上对按键松开后的判断 当d键松开and a键按下时向左移动,
但是这只能解决左右方向上的,不能解决 上左,下左 ,等等 方向上的 , 用这个方法解决的话写的代码太多, 太繁琐
有没有大神有简单的方法
如果还有别的问题,欢迎指正,