pygame游戏编程入门控制角色移动,编程入门先学什么,


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, 0move_x, move_y = 0, 0while 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, 0move_x, move_y = 0, 0while 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()



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

评论关闭