資訊內(nèi)容
用python和pygame游戲編程入門(mén)-鍵盤(pán)設(shè)備
前面的知識(shí)和案例中我們也用了一下鍵盤(pán),那時(shí)候是用了pygame.event.get()獲取所有的事件,當(dāng)event.type == KEYDOWN的時(shí)候,再判斷event.key的種類(lèi)。今天我們?cè)俳榻B一個(gè)方法,pygame.key.get_pressed()來(lái)獲得所有按下的鍵值,它會(huì)返回一個(gè)元組。這個(gè)元組的索引就是鍵值,對(duì)應(yīng)的就是是否按下,比如說(shuō):
當(dāng)我們按下右鍵時(shí),得到的 get_pressed 元組列表如下(注意有一個(gè)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 是一個(gè)常量, 值是275.
key_pressed[pygame.K_RIGHT] 實(shí)質(zhì)上就是key_pressed[275]==1代表右鍵被按下
當(dāng)然key模塊下還有很多函數(shù):
key.get_focused —— 返回當(dāng)前的pygame窗口是否激活
key.get_pressed —— 剛剛解釋過(guò)了
key.get_mods —— 按下的組合鍵(Alt, Ctrl, Shift)
key.set_mods —— 你也可以模擬按下組合鍵的效果(KMOD_ALT, KMOD_CTRL, KMOD_SHIFT)
key.set_repeat —— 無(wú)參數(shù)調(diào)用設(shè)置pygame不產(chǎn)生重復(fù)按鍵事件,二參數(shù)(delay, interval)調(diào)用設(shè)置重復(fù)事件發(fā)生的時(shí)間
key.name —— 接受鍵值返回鍵名
使用鍵盤(pán)控制方向
根據(jù)坐標(biāo)變化規(guī)律,通過(guò)這張圖幫助理解鍵盤(pán)如何控制方向:
我們使用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是什么,傳送門(mén)-->pygame游戲編程入門(mén)-向量類(lèi)的使用
本站部分內(nèi)容轉(zhuǎn)載自網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系管理員及時(shí)刪除。

- 上一篇
用python和pygame游戲編程入門(mén)-鼠標(biāo)設(shè)備
在3D游戲中,可以使用鼠標(biāo)來(lái)控制視角。這種時(shí)候,我們不使用鼠標(biāo)的位置,因?yàn)槭髽?biāo)可能會(huì)跑到窗口外面,我們使用鼠標(biāo)現(xiàn)在與上一幀的相對(duì)偏移量。
- 下一篇
用python和pygame游戲編程入門(mén)-向量類(lèi)的使用
上一節(jié)中我們學(xué)習(xí)并明白了什么是向量,向量之間如何進(jìn)行計(jì)算。現(xiàn)在已經(jīng)有人為我們寫(xiě)好了一個(gè)可以直接使用的向量類(lèi)-》在Python3.x下可用的向量類(lèi)源碼