Download presentation
Presentation is loading. Please wait.
1
Pygame 講者:張浩軒
2
Python簡介 Python的創始人為吉多·范羅蘇姆(Guido van Rossum)
名稱由來:作者非常喜歡一齣BBC的電視短劇《蒙 提·派森的飛行馬戲團》(Monty Python's Flying Circus) 膠水語言:能很好的和C語言、C++、Java整合 設計哲學:「優雅、明確、簡單」、「用一種方法, 最好是只有一種方法來做一件事」
3
Pygame簡介 一種跨平台 Python module
專為電子遊戲設計, 包含圖像、聲音。建立在SDL 基礎上。(SDL:是一套開放原始碼的跨平台多媒體 開發函式庫,使用C語言寫成。) 無需被低階語言束縛,簡化遊戲邏輯本身。 PyWeek:一個用Python語言開發遊戲的競賽。
4
如何開始 1. 安裝Python(建議安裝Python2): 官網:http://www.python.org/
2. 安裝Pygame: 官網:
5
Pygame Tutorial Tutorial: http://www.pygame.org/docs/
Example(Recommended): neByLine.html Cheat sheet(常用指令筆記): ng
6
Read Image
7
Read image fullname = os.path.join(‘data’, name) 把圖片檔path連結fullname,可提供之後讀取圖片 image = pygame.image.load(fullname) 讀取圖片 image = image.convert() 轉換成可以display的介面(pygame.Surface)
8
Read image if colorkey is -1: colorkey = image.get_at((0,0)) image.set_colorkey(colorkey, RLEACCEL) 若輸入的colorkey為-1的話,將圖片最左上角所代 表的顏色RGB值設為透明(達到去背效果) return image, image.get_rect() 回傳image本身,還有代表image的圖形大小和位置 ,get_rect()是傳回pygame.Rect
9
pygame.Rect Rect.move((x,y)) 回傳平移一個向量為(x,y)的Rect
Rect. move_ip((x,y)) Rect本身會移動一個向量為(x,y),不回傳值 Rect. inflate((x,y)) 回傳一個x軸方向伸縮x倍,y軸方向伸縮y倍的Rect Rect. inflate_ip((x.y)) Rect本身會往x軸方向伸縮x倍,y軸方向伸縮y倍, 不回傳值
10
pygame.Rect Rect. colliderect(Rect) 若和輸入的Rect面積有overlap,回傳True
Rect.copy() 複製一個跟原本Rect一模一樣的新Rect回傳 size, width, height,topleft, bottomleft, midleft, center, centerx…… 輸入Rect.XXX可以直接修改Rect的絕對位置
11
pygame初始化&建立背景&螢幕 pygame的初始化 設定螢幕長為468,寬為60 建立螢幕的名稱 滑鼠移至螢幕上會消失
建立背景 確定背景和螢幕的大小一樣 背景顏色設定
12
建立背景文字&顯示螢幕 將背景畫在螢幕上 顯示螢幕
13
pygame.sprite pygame.sprite內含許多遊戲物件的base class,其 中Sprite為最簡單的class
14
pygame.sprite pygame.sprite.RenderPlain 為一種sprite的Group
allsprites.draw(screen) 將allsprites內的所有sprite畫在screen上 pygame.display.flip() 顯示螢幕,flip()會使的圖形出現不會斷斷續續
15
pygame.sprite pygame.sprite.OrderedUpdates() 用draw時,會依照sprite加入Group的順序畫出圖 形,前面提到的RenderPlain則不會
16
整理:建立畫面的順序 1. pygame.display.set_mode((x,y))建立螢幕(screen)
2. 用pygame.Surface建立基本純色背景(background) 3. 將基本圖形、文字用blit畫在背景上 4. 將背景用blit畫在螢幕上 5. 將sprites的group用draw畫在螢幕上 6.用pygame.display.flip()顯示出螢幕
17
遊戲基本控制 #Main Loop while 1: clock.tick(60) 避免遊戲跑太快
#Handle Input Events for event in pygame.event.get(): if event.type == QUIT: return elif event.type == KEYDOWN: 鍵盤任意鍵按下 ……… elif event.type == MOUSEBUTTONDOWN: 滑鼠鍵按下 elif event.type is MOUSEBUTTONUP: 滑鼠鍵起來 #Draw Everything screen.blit(background, (0, 0)) allsprites.draw(screen) pygame.display.flip()
18
控制遊戲速度 clock = pygame.time.Clock() …… while 1: clock.tick(60) clock.tick(t) clock.tick()會計算自從上次呼叫clock.tick()經過多 少milliseconds。 若有輸入t值,會確保每秒不會運算超過t次,達到 降低while內運算速度的結果。 所以t值越小遊戲跑越慢。
19
如何讓兩個角色同時移動 移動時的動作,需要減緩電腦運算速度讓人眼看見 移動的效果
迴圈不能寫在控制遊戲frame的迴圈內,會造成一人 移動時另外一人不能移動 迴圈需要寫在定義角色的class內,針對每個遊戲 frame判斷是否移動
Similar presentations