安裝Pygame
你可以從www.pygame.org下載Pygame,選擇合適你的操作系統(tǒng)和合適的版本嚼锄,然后安裝就可以了(什么场刑,你連Python都沒(méi)有?您可能是不適合看這個(gè)系列了唠亚,不過(guò)如果執(zhí)意要學(xué)链方,很好!快去www.python.org下載吧T钏选)祟蚀。 一旦你安裝好,你可以用下面的方法確認(rèn)下有沒(méi)有安裝成功:
Python
>>> import pygame
就產(chǎn)品而言割卖,Pygame更致力于2D游戲的開(kāi)發(fā)前酿,也就是說(shuō),你可以用Pygame寫(xiě)一個(gè)植物大戰(zhàn)僵尸鹏溯,但是寫(xiě)一個(gè)魔獸世界則相當(dāng)困難……請(qǐng)不要做出鄙夷的目光罢维,底層的東西永遠(yuǎn)是相通的,而且對(duì)于新手而言丙挽,從簡(jiǎn)單的2D入手才是正途肺孵。
使用Pygame
Pygame有很多的模塊,下面是一張一覽表:
模塊名功能
模塊名功能
pygame.cdrom訪問(wèn)光驅(qū)pygame.cursors加載光標(biāo)pygame.display訪問(wèn)顯示設(shè)備pygame.draw繪制形狀颜阐、線和點(diǎn)pygame.event管理事件pygame.font使用字體pygame.image加載和存儲(chǔ)圖片pygame.joystick使用游戲手柄或者 類(lèi)似的東西pygame.key讀取鍵盤(pán)按鍵pygame.mixer聲音pygame.mouse鼠標(biāo)pygame.movie播放視頻pygame.music播放音頻pygame.overlay訪問(wèn)高級(jí)視頻疊加pygame就是我們?cè)趯W(xué)的這個(gè)東西了……pygame.rect管理矩形區(qū)域pygame.sndarray操作聲音數(shù)據(jù)pygame.sprite操作移動(dòng)圖像pygame.surface管理圖像和屏幕pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)pygame.time管理時(shí)間和幀信息pygame.transform縮放和移動(dòng)圖像
有些模塊可能在某些平臺(tái)上不存在平窘,你可以用None來(lái)測(cè)試一下。
Python
新的Hello World
#!/usr/bin/env python?background_image_filename = 'sushiplate.jpg'mouse_image_filename = 'fugu.png'#指定圖像文件名稱(chēng)?import pygame#導(dǎo)入pygame庫(kù)from pygame.locals import *#導(dǎo)入一些常用的函數(shù)和常量from sys import exit#向sys模塊借一個(gè)exit函數(shù)用來(lái)退出程序?pygame.init()#初始化pygame,為使用硬件做準(zhǔn)備?screen = pygame.display.set_mode((640, 480), 0, 32)#創(chuàng)建了一個(gè)窗口pygame.display.set_caption("Hello, World!")#設(shè)置窗口標(biāo)題?background = pygame.image.load(background_image_filename).convert()mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()#加載并轉(zhuǎn)換圖像?while True:#游戲主循環(huán)?????for event in pygame.event.get():????????if event.type == QUIT:????????????#接收到退出事件后退出程序????????????exit()?????screen.blit(background, (0,0))????#將背景圖畫(huà)上去?????x, y = pygame.mouse.get_pos()????#獲得鼠標(biāo)位置????x-= mouse_cursor.get_width() / 2????y-= mouse_cursor.get_height() / 2????#計(jì)算光標(biāo)的左上角位置????screen.blit(mouse_cursor, (x, y))????#把光標(biāo)畫(huà)上去?????pygame.display.update()????#刷新一下畫(huà)面
為了達(dá)到最佳效果凳怨,背景的 sushiplate.jpg應(yīng)要有640×480的分辨率初婆,而光標(biāo)的fugu.png大約應(yīng)為80×80,而且要有Alpha通道猿棉。
稍微講解一下比較重要的幾個(gè)部分:
set_mode會(huì)返回一個(gè)Surface對(duì)象磅叛,代表了在桌面上出現(xiàn)的那個(gè)窗口,三個(gè)參數(shù)第一個(gè)為元祖萨赁,代表分 辨率(必須)弊琴;第二個(gè)是一個(gè)標(biāo)志位,具體意思見(jiàn)下表杖爽,如果不用什么特性敲董,就指定0;第三個(gè)為色深慰安。
標(biāo)志位功能
FULLSCREEN創(chuàng)建一個(gè)全屏窗口DOUBLEBUF創(chuàng)建一個(gè)“雙緩沖”窗口腋寨,建議在HWSURFACE或者OPENGL時(shí)使用HWSURFACE創(chuàng)建一個(gè)硬件加速的窗口,必須和FULLSCREEN同時(shí)使用OPENGL創(chuàng)建一個(gè)OPENGL渲染的窗口RESIZABLE創(chuàng)建一個(gè)可以改變大小的窗口NOFRAME創(chuàng)建一個(gè)沒(méi)有邊框的窗口
convert函數(shù)是將圖像數(shù)據(jù)都轉(zhuǎn)化為Surface對(duì)象化焕,每次加載完圖像以后就應(yīng)該做這件事件(事實(shí)上因?yàn)?它太常用了萄窜,如果你不寫(xiě)pygame也會(huì)幫你做);convert_alpha相比convert,保留了Alpha 通道信息(可以簡(jiǎn)單理解為透明的部分)查刻,這樣我們的光標(biāo)才可以是不規(guī)則的形狀键兜。
游戲的主循環(huán)是一個(gè)無(wú)限循環(huán),直到用戶跳出穗泵。在這個(gè)主循環(huán)里做的事情就是不停地畫(huà)背景和更新光標(biāo)位置普气,雖然背景是不動(dòng)的,我們還是需要每次都畫(huà)它佃延, 否則鼠標(biāo)覆蓋過(guò)的位置就不能恢復(fù)正常了现诀。
blit是個(gè)重要函數(shù),第一個(gè)參數(shù)為一個(gè)Surface對(duì)象履肃,第二個(gè)為左上角位置仔沿。畫(huà)完以后一定記得用update更新一下,否則畫(huà)面一片漆黑榆浓。
這是一個(gè)最最大概的Pygame程序的印象于未,接下來(lái)我們會(huì)學(xué)習(xí)更多深層次的東西撕攒,并且把各條語(yǔ)句都真正讀懂陡鹃。
本次使用的兩張圖片資源:
光標(biāo):fugu.png
參考 http://eyehere.net/2011/python-pygame-novice-professional-2/