pygame實現鍵盤和滑鼠事件的處理

2022-09-25 23:27:12 字數 4042 閱讀 3437

所謂事件,就是程式上發生的事。例如使用者按下鍵盤上的某個鍵或者單擊、移動滑鼠,對於這些事件,遊戲程式需要作出反應。如《 pygame 影象/圖形繪製》中例子,程式會一直執行下去,直到使用者關閉視窗而產生乙個 quit 事件,pygame 會接收使用者的各種操作(例如按鍵盤上的鍵、移動滑鼠等)產生事件。事件隨時可能發生,而且量可能會很大,pygame 的做法是把一系列的事件存放到乙個佇列裡逐個處理。

在上節例子中使用了pygame.event.get()來處理所有事件,如果使用pygame.event.wait(), pygame 會等到發生乙個事件時才繼續下去,一般在遊戲中不太實用,因為遊戲往往是需要動態運作的。pygame 的常用事件如下所示:

事件產生途徑

引數quit

使用者按下「關閉」按鈕

none

activeevent

pygame 被啟用或者隱藏

gain 、state

keydown

鍵盤被按下

unicode 、key 、mod

keyup

鍵盤被放開

key 、mod

mousemotion

滑鼠移動

pos 、rel 、buttons

mousebuttondown

滑鼠被按下

pos 、button

mousebuttonup

滑鼠被放開

pos 、button

通常用pyagme.event.get()獲取所有事件,若event.type == keydown, 這時是鍵盤事件,再判斷按鍵的event.key的種類(即 k_a 、 k_b 、 k_left 這種形式)。使用者也可以使用pygame.key.get_pressed()來獲取所有被按下的鍵值,對應的就是鍵是否被按下。

keys_pressed = pygame.key.get_pressed()

if keys_pressed[k_space]:

# 空格鍵被按下

fire() # 發射子彈

在 key 模組下有很多函式,如下:

使用 pygame 開發乙個由使用者控制坦克移動的遊戲。在上節例子的基礎上增加通過方向鍵控制坦克移動的功能,並為遊戲增加背景。**如下:

pygame.display.set_caption("使用者方向鍵控制移動的坦克")

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()

當使用者按下方向鍵時坦克按指定方向移動,釋放方向鍵時坦克停止移動。如下所示:

pygame.mouse 的函式如下:

例如:x, y = pygame.mouse.get_pos()用於獲取滑鼠位置。

演示滑鼠事件的處理程式,**如下:

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.eventwww.cppcns.com.get():

if event.type == pygame.quit:

pygame.quit()

exit()

if event.type == pygame.keydown:

# 按任意鍵可清屏,並把點恢復到原始狀態

points =

srceen.fill((255, 255, 255)) # 用白色填充視窗背景

if event.type == pygame.mousebuttondown: # 滑鼠按下

screen.fill((255, 255, 255))

# 畫隨機矩形

rc = (255, 0, 0) # 紅色

rp = (randint(0, 639), randint(0, 479))

rs = (639 - randint(rp[0], 639), 479 - randint(rp[ 479))

pygame.draw.rect(screen, rc, pygame.rect(rp, rs))

# 畫隨機圓形

rc = (0, 255, 0) # 綠色

rp = (randint(0, 639), randint(0, 479))

rr = randint(1, 200)

pygame.draw.circle(screen, rc, rp, rr)

# 獲取當前滑鼠單擊位置

x, y = pygame.mouse.get_pos()

points.append((x, y))

# 根據單擊位置畫弧線

angle = (x / 639) * pi * 2

pygame.draw.arc(screen, (0, 0, 0), (0, 0, 639, 479), 0, angle, 3)

# 根據單擊位置畫橢圓

pygame.draw.ellipse(screen, (0, 255, 0), (0, 0, x, y))

# 從左上和右下畫兩根連線到單擊位置

pygame.draw.line(screen, (0, 0, 255), (0, 0), (x,

pygame.draw.line(sceeyhsfreen, (255, 0, 0), (640, 480), (x, y))

# 畫單擊軌跡圖

if len(points) > 1:

pygame.draw.lines(screen, (155, 155, 0), points, false, 2)

# 把滑鼠單擊的每個點畫明顯點

for p in points:

pygame.draw.circle(screen, (155, 155, 155), p, 3)

pygame.display.update()

執行這個程式,在視窗上單擊滑鼠就會有圖形出來,按鍵盤上任意鍵可清屏重新開始。如下:

pygame 鍵盤和滑鼠事件的處理

所謂事件,就是程式上發生的事。例如使用者按下鍵盤上的某個鍵或者單擊 移動滑鼠,對於這些事件,遊戲程式需要作出反應。如 pygame 影象 圖形繪製 中例子,程式會一直執行下去,直到使用者關閉視窗而產生乙個 quit 事件,pygame 會接收使用者的各種操作 例如按鍵盤上的鍵 移動滑鼠等 產生事件。...

webdriver之滑鼠事件和鍵盤事件

在使用滑鼠操作方法需要匯入actionchains類 from selenium.webdriver.common.action chains import actionchains actionchains類提供了滑鼠操作的常用方法 perform 執行所有actionchains中儲存的行為 c...

C 滑鼠和鍵盤事件擷取

方法一 使用鉤子 首先在api宣告的類裡宣告委託 public delegate int procentry int ncode,int wparam,intptr lparam 擷取滑鼠訊息關鍵 private intptr hand public form1 private void form1...