最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pygame實現(xiàn)鍵盤和鼠標事件的處理

 更新時間:2021年03月18日 10:53:10   作者:言若是諾  
這篇文章主要介紹了pygame實現(xiàn)鍵盤和鼠標事件的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

所謂事件,就是程序上發(fā)生的事。例如用戶按下鍵盤上的某個鍵或者單擊、移動鼠標,對于這些事件,游戲程序需要作出反應。如《 pygame 圖像/圖形繪制》中例子,程序會一直運行下去,直到用戶關閉窗口而產(chǎn)生一個 QUIT 事件,pygame 會接收用戶的各種操作(例如按鍵盤上的鍵、移動鼠標等)產(chǎn)生事件。事件隨時可能發(fā)生,而且量可能會很大,pygame 的做法是把一系列的事件存放到一個隊列里逐個處理。

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

事件 產(chǎn)生途徑 參數(shù)
QUIT 用戶按下“關閉”按鈕 None
ACTIVEEVENT pygame 被激活或者隱藏 gain 、state
KEYDOWN 鍵盤被按下 unicode 、key 、mod
KEYUP 鍵盤被放開 key 、mod
MOUSEMOTION 鼠標移動 pos 、rel 、buttons
MOUSEBUTTONDOWN 鼠標被按下 pos 、button
MOUSEBUTTONUP 鼠標被放開 pos 、button

1. pygame 的鍵盤事件的處理

通常用 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()      # 發(fā)射子彈

在 key 模塊下有很多函數(shù),如下:

  • key.get_focused(): 返回當前的 pygame 窗口是否被激活。
  • key.get_pressed(): 獲得所有被按下的鍵值。
  • key.get_mods(): 按下的組合鍵(Alt 、Ctrl 、Shift)。
  • key.set_mods(): 模擬按下組合鍵的效果(KMOD_ALT 、 KMOD_CTRL 、 KMOD_SHIFT)。

使用 pygame 開發(fā)一個由用戶控制坦克移動的游戲。在上節(jié)例子的基礎上增加通過方向鍵控制坦克移動的功能,并為游戲增加背景圖片。代碼如下:

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("用戶方向鍵控制移動的坦克")
  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()

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

2. pygame 的鼠標事件的處理

pygame.mouse 的函數(shù)如下:

  • pygame.mouse.get_pressed(): 返回按鍵的按下情況,返回的是一元組,分別為左鍵、中鍵、右鍵,如果被按下則為 True 。
  • pygame.mouse.get_rel(): 返回相對偏移量,即(x 方向偏移量,y 方向偏移量)的一元組。
  • pygame.mouse.get_pos(): 返回當前鼠標位置(x, y)。

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

  • pygame.mouse.set_pos(): 設置鼠標位置。
  • pygame.mouse.set_visible(): 設置鼠標光標是否可見。
  • pygame.mouse.get_focused(): 如果鼠標在 pygame 窗口內(nèi)有效,返回 True 。
  • pygame.mouse.set_cursor(): 設置鼠標的默認光標樣式。
  • pygame.mouse.get_cursor(): 返回鼠標的光標樣式。

演示鼠標事件的處理程序,代碼如下:

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:
      # 按任意鍵可清屏,并把點恢復到原始狀態(tài)
      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[1], 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))
      # 根據(jù)單擊位置畫弧線
      angle = (x / 639) * pi * 2
      pygame.draw.arc(screen, (0, 0, 0), (0, 0, 639, 479), 0, angle, 3)
      # 根據(jù)單擊位置畫橢圓
      pygame.draw.ellipse(screen, (0, 255, 0), (0, 0, x, y))
      # 從左上和右下畫兩根連線到單擊位置
      pygame.draw.line(screen, (0, 0, 255), (0, 0), (x, y))
      pygame.draw.line(screen, (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實現(xiàn)鍵盤和鼠標事件的處理的文章就介紹到這了,更多相關pygame 鍵盤和鼠標事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python實現(xiàn)常用文本內(nèi)容提取

    Python實現(xiàn)常用文本內(nèi)容提取

    在日常工作和學習中,我們經(jīng)常需要從PDF、Word文檔中提取文本,本文將介紹如何使用Python編寫一個文本內(nèi)容提取工具,有需要的小伙伴可以參考下
    2025-03-03
  • Python實現(xiàn)讀取txt文件并畫三維圖簡單代碼示例

    Python實現(xiàn)讀取txt文件并畫三維圖簡單代碼示例

    這篇文章主要介紹了Python實現(xiàn)讀取txt文件并畫三維圖簡單代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python操作Excel神器openpyxl使用教程(超詳細!)

    Python操作Excel神器openpyxl使用教程(超詳細!)

    openpyxl庫是一個很好處理xlsx的python庫,下面這篇文章主要給大家介紹了關于Python辦公自動化openpyxl使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Python萬字深入內(nèi)存管理講解

    Python萬字深入內(nèi)存管理講解

    內(nèi)存管理是指在程序的運行過程中,分配內(nèi)容和回收內(nèi)存的過程。如果只分配,不回收,電腦上那點內(nèi)存很快就被用光。幸運的是,Python和Java等高級語言會自動管理內(nèi)存的分配和回收
    2022-07-07
  • pycharm連接spark教程

    pycharm連接spark教程

    這篇文章詳細介紹了如何在PyCharm中配置Hadoop和Spark環(huán)境,并提供了一個Python代碼示例來測試連接
    2025-01-01
  • 50行Python代碼實現(xiàn)視頻中物體顏色識別和跟蹤(必須以紅色為例)

    50行Python代碼實現(xiàn)視頻中物體顏色識別和跟蹤(必須以紅色為例)

    本文通過50行Python代碼實現(xiàn)視頻中物體顏色識別和跟蹤效果,通過實例截圖和實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2019-11-11
  • Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例

    Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例

    這篇文章主要介紹了Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能,結合具體實例形式分析了Python實現(xiàn)修飾器針對函數(shù)參數(shù)檢查的原理、步驟與相關操作技巧,需要的朋友可以參考下
    2017-09-09
  • 基于Python Pygame實現(xiàn)的畫餅圖游戲

    基于Python Pygame實現(xiàn)的畫餅圖游戲

    這篇文章主要介紹了基于Pygame實現(xiàn)一個畫餅圖游戲,可以根據(jù)鍵盤上輸入不同的數(shù)字,將圓分割成不同的幾個部分,每部分用不同的顏色來實現(xiàn)。需要的朋友可以參考一下
    2021-12-12
  • python正則分組的應用

    python正則分組的應用

    組是通過 "(" 和 ")" 元字符來標識的。 "(" 和 ")" 有很多在數(shù)學表達式中相同的意思;它們一起把在它們里面的表達式組成一組
    2013-11-11
  • anconda的pip下載包出現(xiàn)的問題解決

    anconda的pip下載包出現(xiàn)的問題解決

    本文主要介紹了anconda的pip下載包出現(xiàn)的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

福贡县| 龙口市| 西昌市| 乌兰察布市| 犍为县| 金门县| 运城市| 谷城县| 巴楚县| 临澧县| 浪卡子县| 喀喇沁旗| 泰和县| 延长县| 洮南市| 依安县| 咸宁市| 宁乡县| 廉江市| 钦州市| 华安县| 洪洞县| 瑞丽市| 陇西县| 饶阳县| 荔波县| 兴业县| 沛县| 台南县| 平山县| 长寿区| 锦屏县| 长泰县| 梁平县| 承德县| 蕉岭县| 武山县| 绵阳市| 宜兰县| 营山县| 雅江县|