【佛山网址之家-佛山网址大全】佛山实用网址,搜索大全尽在fs218.com(Foshan)欢迎您!
网站首页
新闻报刊
数码产品
文学小说
财经股市
娱乐明星
幽默笑话
医疗保健
政府组织
法律资讯
男士女性
编程设计
科技IT
军事资讯
家庭理财
两性健康
汽车资讯
营养美食
人才市场
考试考研
艺术爱好
星座命理
美女帅哥
体育资讯
时装时尚
少年儿童
宠物花鸟
您现在所在位置:主页 > 编程设计 >

用python和pygame游戏编程入门-键盘设备

发布时间:2020-09-10  来源:未知  作者:木木

前面的知识和案例中我们也用了一下键盘,那时候是用了pygame.event.get()获取所有的事件,当event.type == KEYDOWN的时候,再判断event.key的种类。今天我们再介绍一个方法,pygame.key.get_pressed()来获得所有按下的键值,它会返回一个元组。这个元组的索引就是键值,对应的就是是否按下,比如说:

当我们按下右键时,得到的 get_pressed 元组列表如下(注意有一个1):

(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

pygame.K_RIGHT 是一个常量, 值是275.

key_pressed[pygame.K_RIGHT] 实质上就是key_pressed[275]==1代表右键被按下

当然key模块下还有很多函数:

key.get_focused —— 返回当前的pygame窗口是否激活

key.get_pressed —— 刚刚解释过了

key.get_mods —— 按下的组合键(Alt, Ctrl, Shift)

key.set_mods —— 你也可以模拟按下组合键的效果(KMOD_ALT, KMOD_CTRL, KMOD_SHIFT)

key.set_repeat —— 无参数调用设置pygame不产生重复按键事件,二参数(delay, interval)调用设置重复事件发生的时间

key.name —— 接受键值返回键名

使用键盘控制方向

根据坐标变化规律,通过这张图帮助理解键盘如何控制方向:

用python和pygame游戏编程入门-键盘设备

我们使用key.get_pressed()修改之前的程序:


background_image_filename = './img/Underwater.png'
sprite_image_filename = './img/fish-b.png'

import pygame
from pygame.locals import *
from sys import exit
from Vec2d import *
 
pygame.init()
 
screen = pygame.display.set_mode((640, 480), 0, 32)
 
background = pygame.image.load(background_image_filename).convert()
sprite = pygame.image.load(sprite_image_filename).convert_alpha()
 
clock = pygame.time.Clock()
sprite_pos = Vec2d(200, 150)
sprite_speed = 300.
 
while True:
 
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
 
    pressed_keys = pygame.key.get_pressed()

    key_direction = Vec2d(0, 0)
    if pressed_keys[K_LEFT]:
        print(pressed_keys)
        key_direction.x = -1
    elif pressed_keys[K_RIGHT]:
        key_direction.x = +1
    if pressed_keys[K_UP]:
        key_direction.y = -1
    elif pressed_keys[K_DOWN]:
        key_direction.y = +1

    key_direction.normalized()

    screen.blit(background, (0,0))
    screen.blit(sprite, sprite_pos)

    time_passed = clock.tick(30)
    time_passed_seconds = time_passed / 1000.0

    sprite_pos+= key_direction * sprite_speed * time_passed_seconds

    pygame.display.update()


如果你不知道Vec2d是什么,传送门-->pygame游戏编程入门-向量类的使用


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




上一篇:3个意义不寻常的“第一行代码”入藏国博
下一篇:没有了

今日推荐

醉人的夫妻笑喷你
1、一男感慨自己工作不好,工资低,对老婆…[详细]
一点也不矜持的爆笑
1、一哥们儿与女友吵架,不留神爆出那句:…[详细]
校园笑段:开学的心
1、我们上课是为了下课,上学是为了放假。…[详细]
爆逗师生的雷人笑事
1、某天第一节晚自习下课,上完厕所往教室…[详细]
各种尬事儿,件件儿
1、从前,有个牧师劝穷人信教。他问一个穷…[详细]
幽默笑语聊男女
1、妆有多厚,心就有多浅。 2、爱让人借酒…[详细]
爆逗男女:吹了就吹
1、一女滴,和闺蜜一起去公共浴室,刚脱了…[详细]
爆尬,一个比一个雷
1、买门锁,MM说锁也不能太贵,老板说:“…[详细]
校园笑段,从开学笑
1、你们学校校风如何?很大。 2、床,请自…[详细]
见识不凡、经验老道
1、“月明星稀,乌鹊南飞;绕树三匝,无枝…[详细]
愚人小幽默,逗得笑
1、客人:“服务员,这面包烤得这么黑,让…[详细]
爆逗,吐槽的开心逗
1、下辈子我要做你的心脏,至少我不跳你就…[详细]
友情链接:
  • 广美举办学院当代教育国际研讨会 主题聚焦“抽象艺术
  • 第十届中国卫星导航年会五月下旬将在北京举办
  • 长三角“G60科创走廊”:冲破“堵点”找“融点”
  • 角膜上皮干细胞移植给患者带来光明
  • 万博bet官网
  • 时时彩注册送47元彩金
  • 大乐透历史开奖号码
  • 白金会娱乐集团
  • 网上真钱扎金花
  • 888真人备用网址
  • 老虎机作弊器
  • 福彩3d谜语