在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下:
#!/usr/bin/env python
#指定图像文件名称
background_image_filename = './img/Underwater.png'
mouse_image_filename = './img/octopus.png'
#导入pygame库
import pygame
#导入一些常用的函数和常量
from pygame.locals import *
#向sys模块借一个exit函数用来退出程序
from sys import exit
#初始化pygame,为使用硬件做准备
pygame.init()
#创建了一个窗口
screen = pygame.display.set_mode((960, 720), 0, 32)
#设置窗口标题
pygame.display.set_caption("海底世界")
#加载并转换图像
background = pygame.image.load(background_image_filename).convert()
kcursor = pygame.image.load(mouse_image_filename).convert_alpha()
#游戏主循环
x, y = 0, 0
move_x, move_y = 0, 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == KEYDOWN:
#键盘有按下?
if event.key == K_LEFT:
#按下的是左方向键的话,把x坐标减一
move_x = -1
elif event.key == K_RIGHT:
#右方向键则加一
move_x = 1
elif event.key == K_UP:
#类似了
move_y = -1
elif event.key == K_DOWN:
move_y = 1
elif event.type == KEYUP:
#如果用户放开了键盘,图就不要动了
move_x = 0
move_y = 0
#计算出新的坐标
x+= move_x
y+= move_y
screen.fill((0,0,0))
screen.blit(background, (0,0))
screen.blit(kcursor, (x,y))
#在新的位置上画图
pygame.display.update()
当我们运行这个程序的时候,按下方向键就可以把章鱼移动,但是等等!为什么我只能按一下动一下啊……
因为KEYDOWN事件只有在你按下键的那一刻才发生一次,也就是for循环需要有事件发生才会再次执行,你可以试试在按下方向键不松开的时候不停的移动鼠标,这时候章鱼就会一直移动了。
啊??这么麻烦,怎么修改呢?
因为当你按下按键的时候变量值已经进行了修改,所以只需要把计算新坐标后面的代码缩进调整一下,放在跟for循环并列的位置,这样事件发生只会修改坐标的变化数据,不断更新坐标的任务就在while循环里执行了。
修改后的代码;
#!/usr/bin/env python
#指定图像文件名称
background_image_filename = './img/Underwater.png'
mouse_image_filename = './img/octopus.png'
#导入pygame库
import pygame
#导入一些常用的函数和常量
from pygame.locals import *
#向sys模块借一个exit函数用来退出程序
from sys import exit
#初始化pygame,为使用硬件做准备
pygame.init()
#创建了一个窗口
screen = pygame.display.set_mode((960, 720), 0, 32)
#设置窗口标题
pygame.display.set_caption("海底世界")
#加载并转换图像
background = pygame.image.load(background_image_filename).convert()
kcursor = pygame.image.load(mouse_image_filename).convert_alpha()
#游戏主循环
x, y = 0, 0
move_x, move_y = 0, 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == KEYDOWN:
#键盘有按下?
if event.key == K_LEFT:
#按下的是左方向键的话,把x坐标减一
move_x = -1
elif event.key == K_RIGHT:
#右方向键则加一
move_x = 1
elif event.key == K_UP:
#类似了
move_y = -1
elif event.key == K_DOWN:
move_y = 1
elif event.type == KEYUP:
#如果用户放开了键盘,图就不要动了
move_x = 0
move_y = 0
#计算出新的坐标
x+= move_x
y+= move_y
screen.fill((0,0,0))
screen.blit(background, (0,0))
screen.blit(kcursor, (x,y))
#在新的位置上画图
pygame.display.update()
本站内容未经许可,禁止任何网站及个人进行转载。