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

溫馨提示×

溫馨提示×

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

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

Python中的游戲開發模塊pyglet的用法

發布時間:2021-06-30 16:45:48 來源:億速云 閱讀:260 作者:chen 欄目:編程語言

這篇文章主要講解了“Python中的游戲開發模塊pyglet的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中的游戲開發模塊pyglet的用法”吧!

前言

為什么我不選擇pygame,原因很簡單,因為pyglet 更簡單,比較輕量級,就好比django和flask的區別。

相信你在讀了這篇文章之后也會毅然決然的選擇pyglet。

這篇文章主要圍繞pyglet 的安裝、基本用法和實例三部分進行展開。

一、安裝

和大多數模塊安裝方式一樣,pyglet 的安裝方式如下:

pip install pyglet

二、基本用法

#導入模塊 import pyglet

下面我們來看看這個模塊中具體有哪些方法,那么怎么看呢?我們都知道,要查看系統中所有模塊的話,可以使用

pip list

還有一種比較Python的方法:

import sys print(sys.modules.keys())

恩,但是今天我們要查看的是pyglet的所有方法,所以,dir了解下,用這個內置函數:

print(dir(pyglet))

 Python中的游戲開發模塊pyglet的用法

我們先不看那些帶下劃線的方法,因為那些方法都是大佬在研究的方向,我們先看比較平民化的方法,比如說第一個app,image,clock,media,os,sys,text,version,window,input,lib,font,event,是不是一看就能知道它是干啥的?什么,你不知道?那只能說明你英語太差了。比如說我想獲取它的版本號,那么version肯定是首選了,下面來試試:

Python中的游戲開發模塊pyglet的用法

結果和我們料想的一樣,真的是太有才了。既然我們是要用這個來編寫游戲,那么肯定少不了窗口了。

既然談到窗口,那咱們第一印象肯定是window啦,因為它就有窗口的意思。

Python中的游戲開發模塊pyglet的用法

我們可以看到它并未顯示窗口,說明少了點東西,查看官方文檔可知,而且它的參數貌似還不少:

Python中的游戲開發模塊pyglet的用法

這是我從它的源代碼文檔中所得的。可以看出都是平常我們見得比較多的英文。這些參數的說明如下:

width:寬度 height:高度 caption:標題 resizable:是否可以調整大小 style:風格 fullscreen:是否全屏 visible:是否可見 vsync:暫不清楚 file_drops:文件刪除 display:指定的設備 screen:屏幕 config:配置 context:上下文處理器 mode:模式

雖然參數很多,但是并不是每個都能用到。下面我們就簡單創建個窗口吧。

pyglet.window.Window(600, 600) #創建一個600*600的窗口 pyglet.app.run() #啟動 ,有點像flask的啟動方式

 Python中的游戲開發模塊pyglet的用法

這樣就成功啟動了一個窗口。

其實窗口里面還有很多方法,有在用自動提示功能IDE的老鐵應該不陌生:

win.get_location() win.set_location(x,y) win.get_size() win.width win.height

想必大家應該比較熟悉了。

但是這也遠遠不夠啊,我們還得給它點修飾,比如說加點文字圖片什么的。

1、加文字

為了顯示文本,我們得使用text方法,text方法又有很多子方法,因為要添加文本所以先要有一個標簽,所以我們先要加個label方法,下面看看label有哪些方法:

Python中的游戲開發模塊pyglet的用法

可以看出,的確又是一大堆,下面請看參數說明:

text:文本 font_name:字體名 font_size:字體大小 bold:是否加粗 italic:是否傾斜 color:字體顏色 x:文本左下角x坐標 y:文本左下角y坐標 width:文本寬度 height:文本高度 anchor_x:x坐標錨點,可以分為:left  center right anchor_y:y坐標錨點,可以分為:bottom baseline  center  top align:水平方向位置 multiline:是否換行,如果是,需指定寬度 dpi:鼠標每移動一英寸指針在屏幕上移動的點數 batch:批量處理 group:組

接下來我們需要創建一個label:

label = pyglet.text.Label('fuck you',                           font_size=40,                           x=win.width//2, y=win.height//2,  #窗口寬高的一半                           anchor_x='center', anchor_y='center') #中間位置

然后繪制文本:

label.draw()

但是這樣并不能將文字加入到窗口中,因為之前的窗口沒有清除,窗口重繪其實就是一個清除在添加在清除的過程,因為窗口創建時啟用了一個on_draw方法,所以這時我們需要重寫on_draw方法。

@win.event  #裝飾器 def on_draw():#重寫on_draw方法     win.clear() #窗口清除     label.draw() #重繪窗口

這樣窗口就達到最新的效果,就有了文字,然后在啟動:

pyglet.app.run()

 Python中的游戲開發模塊pyglet的用法

2、添加圖片

關于圖片的話,想必里面的image大家應該比較熟悉。

那么我們先將圖片讀取出來,然后進行重繪

import pyglet win=pyglet.window.Window(600, 600) image=pyglet.image.load('2.jpg') #讀取圖片 @win.event def on_draw(): #重寫方法     win.clear() #窗口清除     image.blit(0, 0) #重繪窗口,從左下角的(0,0)處開始繪制 pyglet.app.run() #啟動

這里要說到的一個非常重要的參數便是blit了,它和顯示文字的draw一樣,要想圖片顯示在屏幕上還得靠它。

當然,官方文檔顯示還有一種方法:

import pyglet  win = pyglet.window.Window() image = pyglet.resource.image('2.jpg') #讀取資源文件 @win.event def on_draw():     win.clear()     image.blit(0, 0)  pyglet.app.run()

這樣也可以,兩種方法任選一種,你喜歡就好。

對于加載不同文件夾下的圖片,有什么好的策略了:

pyglet.resource.path = ['./images'] #先導入圖片路徑但是路徑必須和程序在同一個目錄 pyglet.resource.reindex()  #建立索引 image = pyglet.resource.image("1.jpg") #加載圖片 image.get_region(x, y, width, height) #得到新圖片

也可以使用image.load()

from pyglet import image picture = image.load('picture.png') #讀取圖片 #你可以截圖這張圖片,生成張新的圖片。 picture.get_region(x, y, width, height)

目前我們僅僅只接觸到了on_draw 這一個事件,那么pyglet還有哪些有趣的鍵盤和鼠標處理事件呢?我們一起看下吧。

3、鍵盤事件

用法:

def on_key_press(symbol, modifiers): #鍵盤按下     pass  def on_key_release(symbol, modifiers):#鍵盤釋放     pass

1) 常用symbol

按鍵符號:

key.A  #字母 key._1  #數字 #控制鍵 key.ENTER or key.RETURN key.SPACE key.BACKSPACE key.DELETE key.MINUS key.EQUAL key.BACKSLASH  #小鍵盤 key.NUM_1 key.NUM_2 key.NUM_EQUAL key.NUM_DIVIDE key.NUM_MULTIPLY key.NUM_SUBTRACT key.NUM_ADD key.NUM_DECIMAL key.NUM_ENTER  #左右修飾鍵 key.LCTRL key.RCTRL key.LSHIFT key.RSHIFT

判斷按下哪個鍵:

import pyglet from pyglet.window import key win=pyglet.window.Window(500,400) @win.event def on_key_press(symbol, modifiers):          if symbol == key.W:       print('前進')          elif symbol == key.S:       print('后退')         elif symbol == key.A:       print('左移')          elif symbol == key.D:       print('右移')          if modifiers & key.MOD_CTRL:       print('over')  pyglet.app.run()

可以看到結果如我們所料:

Python中的游戲開發模塊pyglet的用法

這樣大家是不是就有種想寫游戲的沖動了了。

當然,pyglet還能將當前鍵盤狀態進行存儲以便隨時調用,可用KeyStateHandler()實現。

import pyglet from pyglet.window import key win=pyglet.window.Window(500,400) kd = key.KeyStateHandler() #初始化 win.push_handlers(kd) #將鍵狀態裝進窗口記錄 有裝當然就有扔:pop if kd[key.SPACE]:   print('按下了空格鍵')

4、鼠標事件

def on_mouse_motion(x,y,dx,dy):#鼠標移動   pass    def on_mouse_press(x, y, button, modifiers): #鼠標按住     pass  def on_mouse_release(x, y, button, modifiers):#鼠標釋放     pass  def on_mouse_drag(x, y, dx, dy, buttons, modifiers):#鼠標拖動     pass      def on_mouse_enter(x, y): #鼠標進入窗口     pass  def on_mouse_leave(x, y): #鼠標離開窗口     pass      def on_mouse_scroll(x, y, scroll_x, scroll_y):#鼠標滾輪     pass

我們可以實現下它的部分有趣功能:

import pyglet win=pyglet.window.Window(500,400) @win.event def on_mouse_motion(x,y,dx,dy):#鼠標移動   print('移動') @win.event   def on_mouse_press(x, y, button, modifiers): #鼠標按住     print('按下鼠標') @win.event def on_mouse_release(x, y, button, modifiers):#鼠標釋放     print('松開鼠標') @win.event def on_mouse_drag(x, y, dx, dy, buttons, modifiers):#鼠標拖動     print('拖動鼠標') @win.event    def on_mouse_enter(x, y): #鼠標進入窗口     print('進入窗口') @win.event def on_mouse_leave(x, y): #鼠標離開窗口     print('離開窗口') @win.event    def on_mouse_scroll(x, y, scroll_x, scroll_y):#鼠標滾輪     print('鼠標滾輪')      pyglet.app.run()

 Python中的游戲開發模塊pyglet的用法

可以看到,我們成功捕獲到鼠標的運行軌跡。

鼠標常數:

這個可以用來判斷到底是哪邊的鼠標按鍵被觸發了。

pyglet.window.mouse.LEFT  #左邊 pyglet.window.mouse.MIDDLE  #中間滾輪 pyglet.window.mouse.RIGHT #右邊

改變鼠標光標:

win.set_mouse_visible(visible=True) #顯示  False隱藏 cursor = win.get_system_mouse_cursor(win.CURSOR_HELP) #獲取操作系統定義的游標 win.set_mouse_cursor(cursor) #設置鼠標外觀

 Python中的游戲開發模塊pyglet的用法

也可以使用自定義圖像作為光標:

image = pyglet.image.load('2.jpg') #讀取圖片 cursor = pyglet.window.ImageMouseCursor(image, 16, 8) #將圖片添加到鼠標游標上 win.set_mouse_cursor(cursor) #設置鼠標游標 win.set_mouse_visible(visible=True) #設置可見

激活鼠標獨占模式:

win.set_exclusive_mouse(True)#射擊游戲常

三、輸入文本事件

用于游戲時輸入某些命令可以更改某些參數,值,達到一定的效果。

import pyglet win=pyglet.window.Window(500,400) @win.event def on_text(text): #輸入文本事件   if text=='i love you':     print('i love you too')

四、window下的事件

1.重設大小

用法:on_resize(width,height)

win=pyglet.window.Window(500,400) @window.event def on_resize(width,height):   width=100   height=200 pyglet.app.run()

我們都知道,如果每個都去這樣設置,費時費力,而且也不簡潔,我們可以用一個類封裝:

import pyglet from pyglet.window import key win=pyglet.window.Window(500,400) class win(pyglet.window.Window): #繼承Window類   def on_resize(self,width,height): #重寫方法     self.width=200  #重設寬度     self.height=100 #重設高度    def on_text(self,text): #文本事件     aa=input('shuru:')     if aa=='I love you':       print('i love you too')   def on_key_press(self,symbol, modifiers): #監聽鍵盤事件     if symbol == key.W:        print('前進')       self.width=self.width+100      elif symbol == key.S:       print('后退')       self.width=self.width+200     elif symbol == key.A:       print('左移')       self.width=self.width-200     elif symbol == key.D:       print('右移')       self.width=self.width-100     if modifiers & key.MOD_CTRL:       print('over')       self.width=self.width+300  win() pyglet.app.run()

有點卡頓,不過問題不大,最重要的是我們把它實現了。

Python中的游戲開發模塊pyglet的用法

五、音樂播放

pyglet不光可以制作游戲,它還可以播放音樂,那么它是怎么實現的呢?

1.使用media.load播放音頻

import pyglet win=pyglet.window.Window() sound = pyglet.media.load('11.wav', streaming=False) #加載音樂,注意只能播放wav格式音頻 sound.play() #播放 pyglet.app.run()

2.使用resource.media播放音頻

import pyglet win=pyglet.window.Window() sound = pyglet.resource.media('11.wav', streaming=False) #加載音樂,注意只能播放wav格式音頻 sound.play() #播放 pyglet.app.run()

兩種方法均可,其實在大部分加載操作中,都可以用到這兩種方法,比如說media /image/text都可以。

如果我們需要控制播放,則需引入另一個方法:Player(),注意第一個是大寫。

play = pyglet.media.Player()

然后我們將播放音頻添加到一個隊列中去:

play.queue(sound)

最后播放:

play.play()

通過上面的講述我們現在就可以添加多首音樂到我們的隊列中了。下面請看:

import pyglet win=pyglet.window.Window() sound = pyglet.resource.media('11.wav', streaming=False) sound1=pyglet.media.load('2.wav', streaming=False) play = pyglet.media.Player() play.queue(sound) #隊列一 play.queue(sound1)#隊列二 play.play()#播放 win.close()  #隱藏黑窗口,可以惡搞別人 pyglet.app.run()

有時候我們想讓這些音頻循環播放那又該怎么辦呢?其實,只需加一個循環即可。

import pyglet win=pyglet.window.Window() sound = pyglet.resource.media('11.wav', streaming=False) sound1=pyglet.media.load('2.wav', streaming=False) play = pyglet.media.Player() def xh():   while 1: #條件為真的循環     yield sound  #不斷的迭代     yield sound1 play.queue(xh()) #添加到隊列 play.play()   #播放 pyglet.app.run()  #啟動

六、視頻播放

無所不能的pyglet,游戲 音頻視頻全能啊,哈哈哈。

播放視頻的方法跟音頻比較相似,但也有很多不同的地方。同樣也是兩種方法:

1.使用media.load播放視頻

import pyglet win=pyglet.window.Window() video = pyglet.media.load('12.mp4') #加載視頻,注意沒有streaming參數 play=pyglet.media.Player() #創建播放器對象 play.queue(video) #添加任務隊列 play.play() #播放 @win.event def on_draw():     win.clear()     play.get_texture().blit(30,60) #設置視頻在黑窗口中的位置,也可使用play.texture.blit(30,60) pyglet.app.run()

2.使用resource.media播放視頻

import pyglet win=pyglet.window.Window() video = pyglet.resource.media('12.mp4') #加載視頻,注意沒有streaming參數 play=pyglet.media.Player() #創建播放器對象 play.queue(video) #添加任務隊列 play.play() #播放 @win.event def on_draw():     win.clear()     play.get_texture().blit(30,60) #設置視頻在黑窗口中的位置 pyglet.app.run()

總結

pyglet  還有很多好玩的例子,比如canvas畫圖,不過相比較我說的幾點,還是會顯得比較無趣些,希望以上的內容能幫助你快速開發一個實用型應用程序。

感謝各位的閱讀,以上就是“Python中的游戲開發模塊pyglet的用法”的內容了,經過本文的學習后,相信大家對Python中的游戲開發模塊pyglet的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

安丘市| 隆化县| 沂南县| 游戏| 都兰县| 八宿县| 湘乡市| 隆化县| 宁南县| 启东市| 个旧市| 逊克县| 凤冈县| 同心县| 东港市| 青冈县| 贵溪市| 西平县| 永善县| 贡觉县| 楚雄市| 石屏县| 南溪县| 台山市| 南昌市| 北安市| 龙胜| 额敏县| 佛教| 合水县| 连平县| 大余县| 沙田区| 浠水县| 锡林浩特市| 兰州市| 岳普湖县| 利辛县| 玉门市| 兴化市| 鄢陵县|