在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下:
#!/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()
本站内容未经许可,禁止任何网站及个人进行转载。