iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0

今天也繼續試試PyGame套件的基本功能~

基本繪圖

在開始繪製幾何圖形前,當然不能直接畫在視窗上,要先有個畫布才能把圖形畫上去,所以在視窗裡建畫布的語法為:

背景變數 = pygame.Surface(screen.get_size())    #get_size()取得視窗尺寸
背景變數 = 背景變數.convert()                    
#convert()建立副本,加快畫布在視窗顯示速度

有了背景變數後,就需要將畫布填滿指定顏色跟讓它顯示在視窗中,使用fill()跟blit()方法如下:
(顏色由3個0到255整數組成,如:(255,0,0)為紅色、(0,255,0)為綠色、 (0,0,255)為藍色)

背景變數.fill((0,0,0))      #黑色
視窗變數.blit(背景變數, 繪製位置)  #繪製覆蓋整個視窗

最後要更新繪圖視窗內容,才能顯示繪製的圖形,語法為:

背景變數.display.update()

以下為完整展示:

import pygame as pg
#pygame初始化
pg.init()

#設定視窗
width, height = 640, 480                      
screen = pg.display.set_mode((width, height)) 
pg.display.set_caption("Sean's game")        

#建立畫布bg
bg = pg.Surface(screen.get_size())
bg = bg.convert()
bg.fill((255,255,255))           #白色
#顯示
screen.blit(bg, (0,0))
pg.display.update()

#關閉程式的程式碼
running = True
while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
pg.quit() 

視窗有了畫布的白色:
https://ithelp.ithome.com.tw/upload/images/20181112/20112078n2AU0i4n6G.png


繪製幾何圖形

經過那複雜的畫布建立,終於可以來繪製幾何圖形了~

矩形

pygame.draw.rect(畫布, 顏色, [x坐標, y坐標, 寬度, 高度], 線寬)

圓形

pygame.draw.circle(畫布, 顏色, (x坐標, y坐標), 半徑, 線寬)

橢圓形

pygame.draw.ellipse(畫布, 顏色, [x坐標, y坐標, x直徑, y直徑], 線寬)

圓弧形

pygame.draw.arc(畫布, 顏色, [x坐標, y坐標, x直徑, y直徑], 起始角, 結束角, 線寬)

直線

pygame.draw.line(畫布, 顏色, (x坐標1, y坐標1), (x坐標2, y坐標2), 線寬)

實例:

import pygame as pg
pg.init()

#設定視窗
width, height = 640, 480                      
screen = pg.display.set_mode((width, height))   
pg.display.set_caption("Sean's game")         
#建立畫布bg
bg = pg.Surface(screen.get_size())
bg = bg.convert()
bg.fill((255,255,255))

#繪製幾何圖形
pg.draw.rect(bg, (0,0,255),[70, 70, 500, 60], 4)
pg.draw.rect(bg, (0,0,255),[70, 150, 500, 60], 0)            #線寬0為實心
pg.draw.circle(bg, (0,0,255),(100,300), 50, 4)
pg.draw.ellipse(bg, (0,0,255),[200,250, 150, 80], 4)
pg.draw.arc(bg, (0,0,255),[400, 250, 70, 150] ,5 ,1.5 , 4)
pg.draw.line(bg, (0,0,255),(550,250), (550, 400), 4)
#要在這兩條程式碼上面喔!!
screen.blit(bg, (0,0))
pg.display.update()


#關閉程式的程式碼
running = True
while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
pg.quit()   

https://ithelp.ithome.com.tw/upload/images/20181112/20112078EvkV6NZB6Q.png

載入圖片

用幾何繪圖實在畫不出像樣的東西來,而且對坐標會對到抓狂,所以還是匯入圖片比較快啦(汗。
語法:

圖片變數 = pygame.image.load(圖片檔案路徑)

圖片載入通常會用convert方法處理,增加繪製速度:

圖片變數.convert()

記得這也要用blit()方法繪製在視窗中喔!

...  #上方省略
image = pygame.image.load("media\\img01.jpg")
image.convert()
bg.blit(image, (20,10))
...

加入文字

其實跟前面一樣,要建立跟繪製,語法為:

#改字體、大小
字體變數 = pygame.font.SysFont(字體名稱, 字體尺寸)
#繪製
文字變數 = 字體變數.render(文字, 平滑值, 文字顏色, 背景顏色)
...  #上方省略
font = pg.font.SysFont("simhei", 24)
text = font.render("Hello", True, (0,0,255), (255,255,255))
bg.blit(text, (320,240))
...

加入音效

音效的部分有分為Music跟Sound,也就是一長一短的音效,那對於我未來的實作大多都是用Sound,所以看看Sound的例子吧:

...  #上方省略
#音效功能初始化
pg.mixer.init()

s = pg.mixer.Sound(hit.wav)  #括弧為音檔名稱
s.set_volume(0.7)  #設定音量大小,參值0~1
s.play()           #播放音效  

...

明天試試動畫處理的部分吧!

參考資料

  • 書名-Python初學特訓班 /文淵閣工作室-編著
  • 書名-輕鬆學Python3 /孫宏明-編著

上一篇
Day27-安裝使用PyGame套件
下一篇
Day29-PyGame動畫處理
系列文
Python 30天學習日誌30

尚未有邦友留言

立即登入留言