標籤:
環境:樹莓派,系統raspbian,系統內建兩個版本的python以及pygame。
1、畫板
程式如下:
1 !/home/pi/game_1.py 2 import pygame 3 4 width = 640 5 height = 480 6 radius = 100 7 fill = 1 8 9 pygame.init() #初始化pygame10 11 window = pygame.display.set_mode((window, height))12 window.fill(pygame.Color(255, 255, 255)) # 用白色填充畫板13 while True:14 pygame.draw.circle(window, pygame.Color(255, 0, 0),15 (width / 2, height / 2), radius, fill) # 紅色畫圓16 pygame.display.update() # 更新映像
輸入命令:python game_1.py
運行程式,結果如下:
鍵盤輸入:ctrl + c
終止程式。
然而,由於樹莓派圖形介面的卡爆,返回到命令視窗再ctrl + c有時候會卡掉,不如直接在pygame視窗上操作來的爽快,其實pygame視窗就是用gui編程的,類似於tkinter模組做成的gui,那麼關掉視窗就需要事件輸入反應,在原來的game_1.py檔案後面加入代碼:
1 while True:2 if pygame.QUIT in [e.type for e in pygame.event.get()]:3 break
我發現樹莓派串連網路這方面真是慢,插上電源啟動網路若干分鐘才能SSH串連到樹莓派ip,至於訪問外網,時有時無,有時候由於某種故障,例如長時間不動樹莓派或者重啟wifi就會導致網路連接失敗,putty成為inactive,這個時候只有重新拔插電源才能正常,否則直接SSH會顯示time out,只能說沒有HDMI線就是麻煩,一重啟網路或者重啟電腦就會出錯。
2、Surface
Surface可想象成一個矩形的映像,可以由多個映像幀組成,用於實現遊戲或動畫中一個情境,接下來要做的就是合并兩張圖片。
tips:由於這裡需要圖片,因此在購買了HDMI轉換器後,使用網路還是很方便的,首先方便傳圖,下載了scrot,下載後直接在命令列輸入:scrot即可截取當前螢幕圖片,也可以通過輸入:scrot -h命令查看協助文檔,比如選擇範圍就可以輸入:scrot -s就可以截取想要的圖片範圍了,儲存的圖片放在當前路徑下,可以使用pi裡面內建的picture viewer查看圖片。
程式如下:
1 import pygame 2 3 pygame.init() 4 #設定黑色背景surface大小 5 screen = pygame.display.set_mode((450,450)) 6 #載入第一張圖片,並將其轉換為與當前模式相匹配的模式 7 background = pygame.image.load("banboo.jpg").convert_alpha() 8 theremin = pygame.image.load("panda.jpg").convert_alpha() 9 #將第一張圖片與surface合并,並通過參數設定圖片合并的位置10 screen.blit(background, (0,0))11 screen.blit(theremin, (135, 150))12 while True:13 pygame.display.update()
結果顯示如下:
分析:由可以看出,大熊貓並沒有被完全顯示,因為大熊貓“panda.jpg”這個圖片的解析度大於竹子“banboo.jpg”這個圖片,因此才不能顯示完整的熊貓圖片,因此可以嘗試調節大熊貓的像素來適應竹子的像素。
3、在Surface上繪圖
如果要繪製一段文字,就需要載入字型,需要用到font模組來載入字型檔並渲染文本。可以先通過pygame.font.get_fonts()函數可以擷取pi上的字型列表:
1 import pygame2 3 pygame.init()4 for fontname in pygame.font.get_fonts():5 print fontname
輸出結果如:
下面將使用代碼載入freemono這個字型來渲染文本:
1 import pygame 2 3 pygame.init() 4 screen = pygame.display.set_mode((725, 92)) 5 #設定字型類型為“freemono”,大小為72號 6 font = pygame.font.SysFont("freemono", 72, bold = 1) 7 textSurface = font.render("I love my pi!", 1, 8 pygame.Color(255, 255, 255)) 9 screen.blit(textSurface, (10, 10))10 while True:11 pygame.display.update()
輸出結果如下:
4、處理事件與輸入
在pygame中,使用者觸發的事件會被捕獲並以Event的對象形式放入訊息佇列,而pygame.event模組提供從訊息佇列中擷取未被處理的事件對象並能夠對事件進行進一步的處理。接下來將會擴充pygame_1程式來通過捕捉滑鼠事件來繪製不同的圓形,原理是越靠近視窗邊緣,圓的半徑越大。
程式如所示:
結果圖很漂亮:
5、播放聲音
tips:這裡,樹莓派螢幕右上方出現一個彩色方塊的原因時供電不足,建議截usb插口的話,用供電的多介面usb,因為嚴重供電不足,否則的話播放音樂插耳機的時候各種故障,然後系統崩潰,樹莓派發熱發燙。
5.1在命令列中輸入以下命令開啟工具介面:
sudo raspi-config
5.2選擇Advanced-option斷行符號後,選擇Audio再斷行符號
5.3由於預設的聲音輸出口試HDMI輸出,如果你的HDMI串連的顯示屏是沒有聲音播放口的話建議轉為類比訊號輸出,也就是耳機輸出,選擇Forced audio即可
好的,現在你可以百度一個線上音樂,在耳機插孔插上耳機就可以聽到音樂了。
6、播放視頻
為了不讓我的樹莓派早夭,我決定去拿供電usb,果然那可惡的小方塊不見了,但是不穩定,用電多的時候,還是會隨著電源的紅色號誌一閃一閃,小方塊也會一閃一閃,可能是供電的電源仍然不夠,或者是因為我插上的東西太多了,或許無線滑鼠和鍵盤會比較好。;
pygame.movie模組可以播放視頻,前提是視頻必須是MPEG1格式的,也就是類似於“.mpg”結尾的視頻。當然可以通過安裝ffmpeg將其他格式的視頻轉換為mpg格式。
代碼如下:
1 import pygame 2 from time import sleep 3 4 pygame.init() 5 6 screen = pygame.display.set_mode((320, 240)) 7 movie = pygame.movie.Movie("foo.mpg") 8 movie.play() 9 while True:10 if not(movie.get_play):11 print("rewind")12 movie.rewind() # 倒帶13 movie.play() #重新播放14 if pygame.QUIT in [event.type for event in pygame.event.get()]:15 break
溫馨提示:在pygame.examples模組中有很多完整的執行個體程式,可以在/usr/share/pyshared/pygame/exalmpes目錄中找到原始碼。
玩轉樹莓派《二》——用python實現動畫與多媒體