事件 | 產(chǎn)生途徑 | 參數(shù) |
---|---|---|
QUIT | 用戶(hù)按下“關(guān)閉”按鈕 | None |
ACTIVEEVENT | pygame 被激活或者隱藏 | gain 、state |
KEYDOWN | 鍵盤(pán)被按下 | unicode 、key 、mod |
KEYUP | 鍵盤(pán)被放開(kāi) | key 、mod |
MOUSEMOTION | 鼠標(biāo)移動(dòng) | pos 、rel 、buttons |
MOUSEBUTTONDOWN | 鼠標(biāo)被按下 | pos 、button |
MOUSEBUTTONUP | 鼠標(biāo)被放開(kāi) | pos 、button |
通常用 pyagme.event.get()
獲取所有事件,若 event.type == KEYDOWN
, 這時(shí)是鍵盤(pán)事件,再判斷按鍵的 event.key
的種類(lèi)(即 K_a 、 K_b 、 K_LEFT 這種形式)。用戶(hù)也可以使用 pygame.key.get_pressed()
來(lái)獲取所有被按下的鍵值,對(duì)應(yīng)的就是鍵是否被按下。
keys_pressed = pygame.key.get_pressed() if keys_pressed[K_SPACE]: # 空格鍵被按下 fire() # 發(fā)射子彈
在 key 模塊下有很多函數(shù),如下:
使用 pygame 開(kāi)發(fā)一個(gè)由用戶(hù)控制坦克移動(dòng)的游戲。在上節(jié)例子的基礎(chǔ)上增加通過(guò)方向鍵控制坦克移動(dòng)的功能,并為游戲增加背景圖片。代碼如下:
import pygame def tank_play(): pygame,inite() tank_image = pygame.image.load("../images/tank.png") tank_rect = tank_image.get_rect() back_image = pygame.iamge.load("../images/background2.jpg") back_rect = back_image.get_rect() screen = pygame.display.set_mode(back_rect.size) pygame.display.set_caption("用戶(hù)方向鍵控制移動(dòng)的坦克") offset = 2 # 偏移量 fps_clock = pygame.time.Clock() while True: fps_clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() keys_pressed = pygame.key.get_presssed() if keys_pressed[pygame.K_RIGHT]: tank_rect.x += offset if keys_pressed[pygame.K_LEFT]: tank_rect.x -= offset if keys_pressed[oygame.K_UP]: tank_rect.y -= offset if keys_pressed[pygame.K_DOWN]: tank_rect.y += offset tank_rect.clamp_ip(back_rect) screen.blit(back_image, back_rect) screen.blit(tank_image, tank_rect) pygame.display.update() if __name__ == '__main--': tank_play()
當(dāng)用戶(hù)按下方向鍵時(shí)坦克按指定方向移動(dòng),釋放方向鍵時(shí)坦克停止移動(dòng)。如下所示:
pygame.mouse 的函數(shù)如下:
例如:x, y = pygame.mouse.get_pos()
用于獲取鼠標(biāo)位置。
演示鼠標(biāo)事件的處理程序,代碼如下:
from math import pi from random import randint import pygame pygame.init() screen = pygame.display.set_mode((640, 480)) points = [] while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.KEYDOWN: # 按任意鍵可清屏,并把點(diǎn)恢復(fù)到原始狀態(tài) points = [] srceen.fill((255, 255, 255)) # 用白色填充窗口背景 if event.type == pygame.MOUSEBUTTONDOWN: # 鼠標(biāo)按下 screen.fill((255, 255, 255)) # 畫(huà)隨機(jī)矩形 rc = (255, 0, 0) # 紅色 rp = (randint(0, 639), randint(0, 479)) rs = (639 - randint(rp[0], 639), 479 - randint(rp[1], 479)) pygame.draw.rect(screen, rc, pygame.Rect(rp, rs)) # 畫(huà)隨機(jī)圓形 rc = (0, 255, 0) # 綠色 rp = (randint(0, 639), randint(0, 479)) rr = randint(1, 200) pygame.draw.circle(screen, rc, rp, rr) # 獲取當(dāng)前鼠標(biāo)單擊位置 x, y = pygame.mouse.get_pos() points.append((x, y)) # 根據(jù)單擊位置畫(huà)弧線(xiàn) angle = (x / 639) * pi * 2 pygame.draw.arc(screen, (0, 0, 0), (0, 0, 639, 479), 0, angle, 3) # 根據(jù)單擊位置畫(huà)橢圓 pygame.draw.ellipse(screen, (0, 255, 0), (0, 0, x, y)) # 從左上和右下畫(huà)兩根連線(xiàn)到單擊位置 pygame.draw.line(screen, (0, 0, 255), (0, 0), (x, y)) pygame.draw.line(screen, (255, 0, 0), (640, 480), (x, y)) # 畫(huà)單擊軌跡圖 if len(points) > 1: pygame.draw.lines(screen, (155, 155, 0), points, False, 2) # 把鼠標(biāo)單擊的每個(gè)點(diǎn)畫(huà)明顯點(diǎn) for p in points: pygame.draw.circle(screen, (155, 155, 155), p, 3) pygame.display.update()
運(yùn)行這個(gè)程序,在窗口上單擊鼠標(biāo)就會(huì)有圖形出來(lái),按鍵盤(pán)上任意鍵可清屏重新開(kāi)始。如下:
到此這篇關(guān)于pygame實(shí)現(xiàn)鍵盤(pán)和鼠標(biāo)事件的處理的文章就介紹到這了,更多相關(guān)pygame 鍵盤(pán)和鼠標(biāo)事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:興安盟 黔東 內(nèi)江 拉薩 亳州 廊坊 渭南 綿陽(yáng)
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pygame實(shí)現(xiàn)鍵盤(pán)和鼠標(biāo)事件的處理》,本文關(guān)鍵詞 pygame,實(shí)現(xiàn),鍵盤(pán),和,鼠標(biāo),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。