亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > pygame實現鍵盤和鼠標事件的處理

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

熱門標簽:西藏快速地圖標注地點 地圖標注推廣單頁 長春人工智能電銷機器人官網 廈門crm外呼系統如何 如何在地圖標注文字 女王谷地圖標注 n400電話申請多少錢 ai地圖標注 百應ai電銷機器人鄭州

所謂事件,就是程序上發生的事。例如用戶按下鍵盤上的某個鍵或者單擊、移動鼠標,對于這些事件,游戲程序需要作出反應。如《 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

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

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

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實現鍵盤和鼠標事件的處理的文章就介紹到這了,更多相關pygame 鍵盤和鼠標事件內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解pygame捕獲鍵盤事件的兩種方式
  • Python中pygame的mouse鼠標事件用法實例
  • python基于pygame實現響應游戲中事件的方法(附源碼)
  • 詳解Python中Pygame鍵盤事件

標簽:興安盟 黔東 內江 拉薩 亳州 廊坊 渭南 綿陽

巨人網絡通訊聲明:本文標題《pygame實現鍵盤和鼠標事件的處理》,本文關鍵詞  pygame,實現,鍵盤,和,鼠標,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pygame實現鍵盤和鼠標事件的處理》相關的同類信息!
  • 本頁收集關于pygame實現鍵盤和鼠標事件的處理的相關信息資訊供網民參考!
  • 推薦文章
    天天色成人| 国产综合成人观看在线| 欧美大片aaaa一级毛片| a级毛片免费观看网站| 四虎影视精品永久免费网站| 日本特黄特黄aaaaa大片| 四虎影视久久久| 国产网站免费| 国产一区精品| 国产不卡在线播放| 久久精品人人做人人爽97| 91麻豆tv| 国产亚洲精品成人a在线| 二级片在线观看| 尤物视频网站在线观看| 欧美爱色| 美女免费精品视频在线观看| 国产成+人+综合+亚洲不卡| 国产国语对白一级毛片| 你懂的日韩| 97视频免费在线| 日本伦理片网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久国产精品自线拍免费| 国产一区免费观看| 欧美国产日韩在线| 日韩在线观看视频网站| 韩国毛片免费大片| 韩国三级香港三级日本三级la| 精品视频在线看| 国产伦精品一区三区视频| 国产精品免费久久| 国产成人欧美一区二区三区的| 日韩专区第一页| 国产精品自拍亚洲| 欧美爱色| 国产一区二区精品久久91| 色综合久久天天综合观看| 国产欧美精品| 国产视频久久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产极品白嫩美女在线观看看| 九九干| 欧美电影免费看大全| 国产视频一区在线| 免费的黄视频| 日韩av成人| 国产伦精品一区二区三区无广告| 国产亚洲精品aaa大片| 欧美激情一区二区三区在线 | 免费一级片网站| 九九久久99综合一区二区| a级黄色毛片免费播放视频| 国产麻豆精品免费密入口| 日本伦理片网站| 国产成人精品综合在线| 成人高清免费| 九九久久国产精品| 国产a毛片| 亚洲 欧美 91| 久久精品大片| 午夜欧美成人久久久久久| 久久久久久久久综合影视网| 色综合久久久久综合体桃花网| 免费一级生活片| 国产伦精品一区三区视频| 国产成人精品在线| 你懂的在线观看视频| 国产精品免费久久| 国产麻豆精品高清在线播放| 日本特黄一级| 黄色免费三级| 国产91精品一区二区| 久久福利影视| 久久精品欧美一区二区| 日韩一级黄色| 欧美1区| 欧美大片一区| 国产精品1024永久免费视频| 美女免费精品视频在线观看| 可以免费看污视频的网站| 99色视频在线观看| 久久久久久久免费视频| 国产精品自拍亚洲| 黄视频网站免费看| 亚洲天堂在线播放| 999精品在线| 久久精品大片| 国产a视频| 久久国产精品自由自在| 成人影视在线播放| 亚洲精品永久一区| 国产伦精品一区三区视频| 亚洲www美色| 黄色免费三级| 日韩avdvd| 色综合久久天天综线观看| 国产福利免费观看| 麻豆系列国产剧在线观看| 毛片成人永久免费视频| 精品视频在线看| 青青久在线视频| 香蕉视频久久| 香蕉视频三级| 中文字幕97| 九九九在线视频| 精品视频一区二区三区免费| 日韩在线观看视频黄| 国产不卡福利| 欧美电影免费看大全| 九九久久99综合一区二区| 亚洲 激情| 国产视频网站在线观看| 国产综合成人观看在线| 国产伦久视频免费观看视频| 美女免费精品高清毛片在线视| 成人影院久久久久久影院| 国产综合成人观看在线| 精品国产亚洲一区二区三区| 四虎影视久久| 日韩在线观看视频免费| 九九精品在线| 夜夜操天天爽| 亚飞与亚基在线观看| 可以免费看污视频的网站| 成人免费网站久久久| 国产成人女人在线视频观看| 91麻豆tv| 日本乱中文字幕系列| 亚飞与亚基在线观看| 精品视频在线观看一区二区| 成人免费观看视频| 成人免费网站视频ww| 午夜激情视频在线观看| 美女被草网站| 国产福利免费视频| 亚洲天堂在线播放| 九九免费精品视频| 一级女性全黄生活片免费| 成人a大片在线观看| 亚洲精品影院| 日韩免费在线观看视频| 日韩男人天堂| 美女免费精品高清毛片在线视| 91麻豆精品国产自产在线观看一区| 免费国产在线视频| 精品国产一区二区三区久| 在线观看导航| 免费国产一级特黄aa大片在线| 精品在线免费播放| 日韩在线观看免费完整版视频| 99色视频在线观看| 久久99欧美| 日本免费乱理伦片在线观看2018| 美女免费精品高清毛片在线视| 日韩avdvd| 美女免费毛片| 精品国产香蕉在线播出| 青青久久精品| 国产美女在线观看| 国产成a人片在线观看视频| 美女免费黄网站| 久久国产影院| 国产极品精频在线观看| 日韩中文字幕一区二区不卡| 日韩中文字幕一区| 色综合久久手机在线| 99久久网站| 九九精品在线播放| 国产视频网站在线观看| 国产一区二区福利久久| 国产不卡在线播放| 成人免费观看视频| 国产伦久视频免费观看 视频 | 天天做日日爱| 日韩欧美一及在线播放| 欧美电影免费看大全| 可以免费看污视频的网站| 精品久久久久久中文字幕一区| 国产综合成人观看在线| 欧美激情一区二区三区在线| 国产91精品一区二区| 亚洲女人国产香蕉久久精品 | 国产成人精品综合久久久| 久久99中文字幕| 精品视频在线看| 精品视频在线观看视频免费视频| 欧美另类videosbestsex高清| 亚洲精品影院久久久久久| 成人免费观看的视频黄页| 台湾毛片| 久久国产精品自由自在| 青青青草视频在线观看| 国产成人精品综合久久久| 夜夜操天天爽| 久久国产精品自由自在| 精品国产一区二区三区免费| 免费国产在线视频| 国产麻豆精品| 四虎论坛|