中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在pygame中對鍵盤和鼠標事件進行處理

發布時間:2021-03-18 15:05:41 來源:億速云 閱讀:291 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在pygame中對鍵盤和鼠標事件進行處理,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

pygame 的常用事件如下所示:

事件產生途徑參數
QUIT用戶按下“關閉”按鈕None
ACTIVEEVENTpygame 被激活或者隱藏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()      # 發射子彈

在 key 模塊下有很多函數,如下:

  • key.get_focused(): 返回當前的 pygame 窗口是否被激活。

  • key.get_pressed(): 獲得所有被按下的鍵值。

  • key.get_mods(): 按下的組合鍵(Alt 、Ctrl 、Shift)。

  • key.set_mods(): 模擬按下組合鍵的效果(KMOD_ALT 、 KMOD_CTRL 、 KMOD_SHIFT)。

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

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

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

怎么在pygame中對鍵盤和鼠標事件進行處理

2. pygame 的鼠標事件的處理

pygame.mouse 的函數如下:

  • 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 窗口內有效,返回 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:
      # 按任意鍵可清屏,并把點恢復到原始狀態
      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))
      # 根據單擊位置畫弧線
      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, 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中對鍵盤和鼠標事件進行處理,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静安区| 阿坝县| 安泽县| 阳信县| 洛扎县| 商南县| 九台市| 同仁县| 齐河县| 台北县| 屏山县| 额济纳旗| 三河市| 封开县| 桃园市| 博野县| 中方县| 井研县| 巴青县| 阿瓦提县| 从江县| 石河子市| 任丘市| 外汇| 贺兰县| 嘉黎县| 澄迈县| 西昌市| 潮安县| 沈阳市| 达尔| 平顶山市| 榆树市| 洛南县| 来安县| 桓仁| 新泰市| 隆尧县| 恩施市| 涿鹿县| 衡南县|