国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02

這篇具有很好參考價(jià)值的文章主要介紹了Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

首先解釋幾個(gè)問題:

1、事件處理需求主要有以下幾個(gè)方面:

2、Pygame事件隊(duì)列

3、Pygame事件

4、事件類型及屬性

?5、事件處理的重要函數(shù)

?6、鍵盤事件

7、鼠標(biāo)事件

8、處理事件函數(shù)

9、操作事件隊(duì)列

10、生成事件

其次給出代碼段,有利于大家對(duì)其進(jìn)行學(xué)習(xí)和分析

最后進(jìn)行小結(jié):


作為一款游戲,一方面是游戲的內(nèi)容是否吸引人,另一方面就是作為游戲者參與其中,因此如何與用戶互動(dòng)是需要著重解決的問題,因此第二部分是事件處理機(jī)制,也就是上篇中提到的event.type的處理。一般為鍵盤和鼠標(biāo)輸入,開發(fā)高級(jí)一點(diǎn)游戲還需要游戲桿,這里主要說一下鍵盤和鼠標(biāo)操作的處理。

首先解釋幾個(gè)問題:

1、事件處理需求主要有以下幾個(gè)方面:

? 響應(yīng)用戶鍵盤、鼠標(biāo)等外設(shè)操作
? 響應(yīng)屏幕尺寸和模式變化
? 響應(yīng)游戲情節(jié)的特定觸發(fā)條件
? 產(chǎn)生一些觸發(fā)條件
? ……

2、Pygame事件隊(duì)列

建立的一個(gè)隊(duì)列,用于緩存并派發(fā)所有事件
原則上先到先處理

3、Pygame事件

pygame.event.EventType
? 事件本質(zhì)上是一種封裝后的數(shù)據(jù)類型(對(duì)象)
? EventType是Pygame的一個(gè)類,表示事件類型
? 事件類型只有屬性,沒有方法
? 用戶可自定義新的事件類型

4、事件類型及屬性

Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02

?5、事件處理的重要函數(shù)

Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02

?6、鍵盤事件

Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02

針對(duì)事件類型,例如鍵盤中按下,然后針對(duì)不同的鍵值和修飾符組合,可以實(shí)現(xiàn)多種對(duì)游戲的操作反饋,從而實(shí)現(xiàn)人對(duì)游戲的全面操控,但是基于游戲的可玩性,盡量的減少按鍵的數(shù)量,對(duì)于游戲是有益的!

7、鼠標(biāo)事件

Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02

?(1)pygame.event.MOUSEMOTION鼠標(biāo)移動(dòng)事件
? event.pos?鼠標(biāo)當(dāng)前坐標(biāo)值(x,y),相對(duì)于窗口左上角
? event.rel?鼠標(biāo)相對(duì)運(yùn)動(dòng)距離(X,Y),相對(duì)于上次事件
? event.buttons?鼠標(biāo)按鈕狀態(tài)(a,b,c),對(duì)應(yīng)于鼠標(biāo)的三個(gè)鍵

(2)pygame.event.MOUSEBUTTONUP?鼠標(biāo)鍵釋放事件
? event.pos?鼠標(biāo)當(dāng)前坐標(biāo)值(x,y),相對(duì)于窗口左上角
? event.button?鼠標(biāo)按下鍵編號(hào)n,取值 0/1/2,分別對(duì)應(yīng)三個(gè)鍵

(3)pygame.event.MOUSEBUTTONDOWN?鼠標(biāo)鍵按下事件
? event.pos?鼠標(biāo)當(dāng)前坐標(biāo)值(x,y),相對(duì)于窗口左上角
? event.button?鼠標(biāo)按下鍵編號(hào)n,取值為整數(shù),左鍵為1,右鍵為3,設(shè)備相關(guān)

8、處理事件函數(shù)

(1)pygame.event.get()

? 從事件隊(duì)列中獲得事件列表,即獲得所有被隊(duì)列的事件

例如:

for event in pygame.event.get():
????????if event.type == pygame.QUIT:
????????sys.exit()
? 可以增加參數(shù),獲得某類或某些類事件:
pygame.event.get(type)
pygame.event.get(typelist)

(2)pygame.event.poll()

? 從事件隊(duì)列中獲得一個(gè)事件

While True:
????????event = pygame.event.poll()
? 事件獲取將從事件隊(duì)列中刪除
? 如果事件隊(duì)列為空,則返回 event.NOEVENT

(3)pygame.event.clear()

? 從事件隊(duì)列中刪除事件,默認(rèn)刪除所有事件
? 該函數(shù)與pygame.event.get()類似,區(qū)別僅是不對(duì)事件進(jìn)行處理
? 可以增加參數(shù),刪除某類或某些類事件:
pygame.event.clear(type)
pygame.event.clear(typelist)

9、操作事件隊(duì)列

pygame.event.set_blocked(type or typelist)

? 控制哪些類型事件不允許被保存到事件隊(duì)列中

pygame.event.set_allowed(type or typelist)

? 控制哪些類型事件允許被保存到事件隊(duì)列中

pygame.event.get_blocked(type)

? 測(cè)試某個(gè)事件類型是否被事件隊(duì)列所禁止
? 如果事件類型被禁止,則返回True,否則返回False

10、生成事件

pygame.event.post(Event)

? 產(chǎn)生一個(gè)事件,并將其放入事件隊(duì)列
? 一般用于放置用戶自定義事件(pygame.USEREVENT)
? 也可以用于放置系統(tǒng)定義事件(如鼠標(biāo)或鍵盤等),給定參數(shù)

pygame.event.Event(type, dict)

? 創(chuàng)建一個(gè)給定類型的事件
? 其中,事件的屬性和值采用字典類型復(fù)制,屬性名采用字符串形式
? 如果創(chuàng)建已有事件,屬性需要一致

其次給出代碼段,有利于大家對(duì)其進(jìn)行學(xué)習(xí)和分析

# Unit PYG03: Pygame Wall Ball Game version 8  鼠標(biāo)型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可調(diào)

icon = pygame.image.load("PYG03-flower.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("PYG02-ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()
still = False

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                still = True
        elif event.type == pygame.MOUSEBUTTONUP:
            still = False
            if event.button == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
        elif event.type == pygame.MOUSEMOTION:
            if event.buttons[0] == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
    if pygame.display.get_active() and not still:
        ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
        if ballrect.right > width and ballrect.right + speed[0] > ballrect.right:
            speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]
        if ballrect.bottom > height and ballrect.bottom + speed[1] > ballrect.bottom:
            speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

上面的代碼中用到獲取事件,處理了關(guān)閉、鍵盤、鼠標(biāo)、窗口變化等,可以用于分析代碼使用

# Unit PYG04: Pygame Event Post
import pygame,sys

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pygame事件處理")
fps = 1
fclock = pygame.time.Clock()
num = 1

while True:
    uevent = pygame.event.Event(pygame.KEYDOWN, {"unicode": 123, "key":pygame.K_SPACE, "mod":pygame.KMOD_ALT})
    pygame.event.post(uevent)
    num = num + 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.unicode == "":
                print("[KEYDOWN {}]:".format(num), "#", event.key, event.mod)
            else:
                print("[KEYDOWN {}]:".format(num), event.unicode, event.key, event.mod)

    pygame.display.update()
    fclock.tick(fps)

上面的代碼段創(chuàng)建和產(chǎn)生事件的操作,可用于學(xué)習(xí)使用,代碼段來源于慕課

最后進(jìn)行小結(jié):

本文簡(jiǎn)單的介紹了pygame的事件處理機(jī)制。

1、事件的處理需求通俗的講,就是軟件如何應(yīng)對(duì)用戶的操作,何種操作對(duì)應(yīng)如何處置,那些需要響應(yīng),哪些不需要響應(yīng),哪些重點(diǎn)響應(yīng),哪些可以等會(huì)響應(yīng),以及如何響應(yīng)的問題。

2、事件隊(duì)列通俗講就是排隊(duì)需要解決的問題,一般是后來先處理,但也可以設(shè)置不同的處理方式。

3、事件類型是pygame可以處理的類型,并對(duì)鍵盤、鼠標(biāo)等進(jìn)行重點(diǎn)解釋。這些事件類型是應(yīng)用于事件處理中的,排在事件隊(duì)列中,但一般不需要我們管事件隊(duì)列的處理方式

4、事件處理的重要函數(shù)則是對(duì)事件進(jìn)行處理的方法,哪些需要處理,哪些不需要處理,如何處理都是由此處理的,甚至于根據(jù)自己需要生成事件進(jìn)行處理。

注:鍵盤的常用鍵值和修飾值一般不需要記憶,用的時(shí)候查一下就行了!有點(diǎn)太多了,了解一下就中了!文章來源地址http://www.zghlxwxcb.cn/news/detail-461277.html

到了這里,關(guān)于Pygame事件處理機(jī)制簡(jiǎn)介-慕課的python游戲開發(fā)入門02的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python游戲篇:pygame

    Python游戲篇:pygame

    pygame專門用于多媒體(如電子游戲開發(fā)),其中包含對(duì)圖像、聲音、視頻、事件、碰撞等支持, 如果想開發(fā)3D游戲,pygame就顯得力不從心了,可以看看panda3d。 pygame中的draw模塊可以在窗口上繪圖如線條、矩形、多邊形、圓、橢圓、圓弧等。 pygame中的image模塊用來加載圖片。

    2024年02月13日
    瀏覽(33)
  • 【Python】pygame彈球游戲?qū)崿F(xiàn)

    游戲源碼: pygame_os庫:

    2024年02月12日
    瀏覽(32)
  • Python 游戲開發(fā)與 Pygame

    第一章. Python 簡(jiǎn)介 Python 簡(jiǎn)介和歷史 Python 特點(diǎn)和優(yōu)勢(shì) 安裝 Python 第二章. 變量和數(shù)據(jù)類型 變量和標(biāo)識(shí)符 基本數(shù)據(jù)類型:數(shù)字、字符串、布爾值等 字符串操作 列表、元組和字典 第三章. 控制語句和函數(shù) 分支結(jié)構(gòu):if/else 語句 循環(huán)結(jié)構(gòu):for 和 while 循環(huán) 函數(shù) 參數(shù)傳遞與返回值

    2024年04月17日
    瀏覽(23)
  • Java鍵盤事件處理及監(jiān)聽機(jī)制解析

    Java鍵盤事件處理及監(jiān)聽機(jī)制解析

    Java事件處理采用了委派事件模型。在這個(gè)模型中,當(dāng)事件發(fā)生時(shí),產(chǎn)生事件的對(duì)象將事件信息傳遞給事件的監(jiān)聽者進(jìn)行處理。在Java中,事件源是產(chǎn)生事件的對(duì)象,比如窗口、按鈕等;事件是承載事件源狀態(tài)改變時(shí)的對(duì)象,比如鍵盤事件、鼠標(biāo)事件、窗口事件等等。當(dāng)事件發(fā)

    2024年02月13日
    瀏覽(25)
  • Python的Pygame游戲框架(匯總)

    Python的Pygame游戲框架(匯總)

    個(gè)人主頁 : ζ小菜雞 大家好我是ζ小菜雞,小伙伴們,讓我們一起來學(xué)習(xí)Python的Pygame游戲框架。 如果文章對(duì)你有幫助、 歡迎關(guān)注、點(diǎn)贊、收藏(一鍵三連) ??pygame是跨平臺(tái)Python模塊,專為電子游戲設(shè)置,包含圖像、聲音。創(chuàng)建在SDL(Simple Direct Medica Layer)基礎(chǔ)上,允許實(shí)時(shí)電

    2024年02月09日
    瀏覽(36)
  • python游戲庫pygame經(jīng)典教程

    python游戲庫pygame經(jīng)典教程

    目錄 一.Pygame程序基本搭建過程 ????????1.初始化化程序 ????????2.創(chuàng)建Surface對(duì)象 ????????3.事件監(jiān)聽 ????????4.游戲循環(huán)? 二.Pygame Display顯示模塊詳解 ????????1.將Surface對(duì)象粘貼至主窗口上 ????????2.設(shè)置窗口主窗口 ????????3.填充主窗口背景,參數(shù)

    2024年02月03日
    瀏覽(102)
  • Python之Pygame游戲編程詳解

    Python之Pygame游戲編程詳解

    1.1? 定義 Pygame是一種流行的Python游戲開發(fā)庫,它提供了許多功能,使開發(fā)人員可以輕松創(chuàng)建2D游戲。它具有良好的跨平臺(tái)支持,可以在多個(gè)操作系統(tǒng)上運(yùn)行,例如Windows,MacOS和Linux。在本文中,我們將介紹Pygame庫的特點(diǎn)和用法,幫助您了解如何使用Pygame庫進(jìn)行游戲開發(fā)。它提

    2024年02月04日
    瀏覽(27)
  • Python游戲利器pygame,瘋狂賽車(34)

    Python游戲利器pygame,瘋狂賽車(34)

    小朋友們好,大朋友們好! 我是貓妹,一名愛上Python編程的小學(xué)生。 歡迎和貓妹一起,趣味學(xué)Python。 今日主題 你玩過游戲嗎? 你喜歡玩游戲嗎? 手機(jī)游戲,電腦游戲,還是游戲機(jī)游戲? pygame是一個(gè)跨平臺(tái)Python庫,pygame 作者是 Pete Shinners, 協(xié)議為 GNU Lesser General Public Lice

    2024年02月05日
    瀏覽(43)
  • python模塊: pygame(自己動(dòng)手寫游戲)

    python模塊: pygame(自己動(dòng)手寫游戲)

    目錄 一、pygame的安裝 ?二、pygame基礎(chǔ)操作 1.基本窗體設(shè)置 2.surface組件 ?3.event事件 一、pygame的安裝 在pycharm 左下角的終端上輸入指令pip install pygame,按下回車鍵執(zhí)行下載,推薦下載到虛擬環(huán)境上,即路徑前方帶有(venv)?;蛘卟皇褂胮ycharm,在控制窗口輸入執(zhí)行該命令也可以(控

    2024年03月21日
    瀏覽(33)
  • Python基礎(chǔ)篇(十五)-- Pygame游戲編程

    Python基礎(chǔ)篇(十五)-- Pygame游戲編程

    ????????Pygame是一個(gè)開源的Python模塊,專門用于多媒體應(yīng)用(如電子游戲)的開發(fā),其中包含對(duì)圖像、聲音、視頻、事件、碰撞等的支持。Pygame建立在SDL的基礎(chǔ)上,SDL是一套跨平臺(tái)的多媒體開發(fā)庫,用C語言實(shí)現(xiàn),被廣泛的應(yīng)用于游戲、模擬器、播放器等的開發(fā)。而Pygame讓

    2024年02月05日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包