pygame游戏编程入门控制角色移动

在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下:

#!/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()



本站内容未经许可,禁止任何网站及个人进行转载。