pygame的安裝以及備忘

一開始上來就寫一些對函數(shù)的理解噪奄,終究是對初學(xué)者的不友好硬毕,考慮到更多學(xué)習(xí)pygame這個(gè)模塊的人大多是從事編程教育或是初學(xué)者臭觉,覺得有一篇文風(fēng)和善柱查,細(xì)細(xì)道來的安裝文檔總歸是相宜的知残。
并且pygame這個(gè)模塊近些年的更新靠瞎,還是有很多的不適配或是各種各樣的問題,在學(xué)生和外地的同事中總有這樣那樣的反饋求妹。在這里保留一篇安裝文檔乏盐,能讓他們更快地解決這些在安裝和使用過程中的問題。
我之前有寫過一篇《pygame的第一步》制恍,這里我就把它引用過來父能,并且做一個(gè)完善。有點(diǎn)長净神,簡書也暫時(shí)不支持TOC目錄何吝,所以看到不感興趣的快速下拉吧溉委。

pygame框架簡介

對于pygame的介紹,在網(wǎng)上真的基本上千篇一律爱榕,大多會(huì)感慨感謝一下作者瓣喊,惋惜一下這個(gè)包在09年的時(shí)候就停止更新(但是它神奇地在17年1月份更新了)。真正的它的意義黔酥,很少人提及藻三。下面引用一下《pygame菜鳥入門指南》里的一段介紹:

pygame是一個(gè)由Pete Shinners編寫的SDL的Python封裝。這就意味著絮爷,使用pygame趴酣,你可以寫出可以不作修改就可以在任何支持SDL的平臺(tái)(Windows, Unix, Mac, BeOS,等等)上運(yùn)行的游戲或者多媒體程序坑夯。

簡單的理解一下岖寞,它的底層是使用C編寫的SDL(simple DirectMedia Layer)。提供了多種控制凸顯個(gè)柜蜈、聲音仗谆、輸出入得函數(shù)。讓開發(fā)者是要用相同或者是相似的代碼就可以開發(fā)出跨多個(gè)平臺(tái)(linux淑履、windows隶垮、mac OS X等)的應(yīng)用軟件。目前SDL多用于開發(fā)游戲秘噪,模擬器狸吞,媒體播放器等多媒體應(yīng)用領(lǐng)域……

SDL內(nèi)置調(diào)用了OpenGL的函數(shù)≈讣澹……SDL也有其他語言的包裝蹋偏,SDL用C語言寫成,但是很容易在C++下工作至壤,并且綁定了許多其他的語言……包裝的比較好的是python語言的pygame……

在我省略了好多……之后威始,pygame和SDL和OpenGL的關(guān)系漸漸明朗了起來。雖然沒有對pygame的能力有很詳細(xì)的描述像街,但是也能簡單了解它的主要應(yīng)用場景和主要的功能黎棠。

安裝

超簡單,如果有完整的python開發(fā)環(huán)境镰绎,這個(gè)應(yīng)該不是什么問題脓斩。

pip install pygame

上面的話是我之前剛開始教學(xué)的時(shí)候?qū)懙模髞黼S著接觸的學(xué)生越來越多跟狱,我發(fā)現(xiàn)事實(shí)并不是這樣的俭厚,以下的內(nèi)容就是我的補(bǔ)充。

  • 問題一:Python版本安裝不正確導(dǎo)致pygame異常
    這個(gè)異常我碰到過兩次驶臊,都是在Python剛剛更新到3.7的版本的時(shí)候挪挤。很多時(shí)候初學(xué)者去學(xué)習(xí)Python叼丑,都會(huì)挑選最新的版本Python去學(xué)習(xí)。但是pygame作為一個(gè)扛门,相對來說之前比較“懶”更新的庫(最近他們更新的還是很勤快及時(shí)的鸠信,官網(wǎng)和文檔也都做了很好的優(yōu)化和更新),很容易在Python語言更新的初期论寨,跟不上更新進(jìn)度星立,導(dǎo)致安裝的時(shí)候出現(xiàn)問題。
    在前段時(shí)間的教學(xué)中葬凳,我一直使用的3.6.x版本的Python绰垂,相對來說比較穩(wěn)定,而且版本也很新火焰。所以我這里推薦暫時(shí)需要穩(wěn)定學(xué)習(xí)pygame的同學(xué)劲装,安裝使用3.6左右版本的Python,然后使用pip命令安裝pygame(自動(dòng)匹配版本昌简,如果要手動(dòng)安裝的話占业,去pygame的官網(wǎng)下載對應(yīng)版本號(hào)的就可以。)纯赎。

  • 問題二:Python安裝位置的權(quán)限問題影響pygame安裝
    之前有很多回家安裝的學(xué)生有和我說過谦疾,安裝的時(shí)候出現(xiàn)紅色的字或者是灰色的字。大部分學(xué)生在安裝Python的時(shí)候犬金,根據(jù)我的要求去打了相關(guān)的√念恍,但是很少有去修改Python的安裝路徑的。所以大部分的這些學(xué)生的Python都被安裝在了C盤晚顷。


    報(bào)錯(cuò)截圖.png

    如果要在C盤的Python文件夾中安裝一個(gè)新的庫樊诺,多半是需要用到管理員權(quán)限的,如果是使用軟件的過程中需要用到管理員權(quán)限音同,PC系統(tǒng)會(huì)提示你是否授權(quán)。但是在CMD窗口安裝的時(shí)候秃嗜,這個(gè)彈窗不會(huì)彈出來权均,而是直接說明報(bào)錯(cuò),無法獲取這個(gè)寫入權(quán)限锅锨。
    這時(shí)候其實(shí)只要用管理員權(quán)限的CMD窗口輸入pip命令就不會(huì)出現(xiàn)這種問題叽赊。


    管理員權(quán)限CMD.png

    點(diǎn)擊確認(rèn)彈出的權(quán)限窗口,這時(shí)候的CMD窗口左上角應(yīng)該是:
    窗口名稱.png
Installing collected packages: pygame
Successfully installed pygame-1.9.4

如果在結(jié)果中沒有報(bào)出紅色報(bào)錯(cuò)信息必搞,而且能夠看到上面的兩句話必指,就說明安裝成功了。

模塊列表

模塊名 功能
pygame.cdrom 訪問光驅(qū)
pygame.cursors 加載光標(biāo)
pygame.display 訪問顯示設(shè)備
pygame.draw 繪制形狀恕洲、線和點(diǎn)
pygame.event 管理事件
pygame.font 使用字體
pygame.image 加載和存儲(chǔ)圖片
pygame.joystick 使用游戲手柄或者類似的東西
pygame.key 讀取鍵盤按鍵
pygame.mixer 聲音
pygame.mouse 鼠標(biāo)
pygame.movie 播放視頻
pygame.music 播放音頻
pygame.overlay 訪問高級視頻疊加
pygame.rect 管理矩形區(qū)域
pygame.sndarry 操作聲音數(shù)據(jù)
pygame.sprite 操作移動(dòng)圖像
pygame.surface 管理圖像和屏幕
pygame.surfarry 管理點(diǎn)陣圖像數(shù)據(jù)
pygame.time 管理時(shí)間和幀信息
pygame.transform 縮放和移動(dòng)圖像

其中一些我覺得比較重要的或者在初級使用階段會(huì)經(jīng)常碰到的一些字段塔橡,我都添加了標(biāo)記梅割,在之后的學(xué)習(xí)中可以重點(diǎn)關(guān)注一下這一塊的源碼。

有些模塊可能在某些平臺(tái)上不存在(有這個(gè)名稱字段葛家,但是為空)户辞,可以用None判斷一下。

In [3]: pygame.font is None
Out[3]: False

詳解一個(gè)簡單的pygame程序

background_image_filename = 'sushiplate.jpg'
mouse_image_filename = 'fugu.png'
#指定圖像文件名稱

import pygame
#導(dǎo)入pygame庫
from pygame.locals import *
#導(dǎo)入一些常用的函數(shù)和常量
from sys import exit
#向sys模塊借一個(gè)exit函數(shù)用來退出程序

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()
            #這個(gè)負(fù)責(zé)監(jiān)聽事件的循環(huán)非常重要癞谒,是event模塊在pygame程序中最頻繁的使用

    screen.blit(background, (0,0))
    #將背景圖畫上去  blit(圖片源,起始點(diǎn))

    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)畫上去

    pygame.display.update()
    #刷新一下畫面

上面的程序其實(shí)注釋已經(jīng)非常詳盡了夏志,我們有幾點(diǎn)需要注意的:

  • set_mode():他會(huì)返回一個(gè)surface對象枚荣,代表了在桌面上出現(xiàn)的那個(gè)窗口,從源碼中可以看到:
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
   Initialize a window or screen for display

它需要三個(gè)參數(shù),resolution就是分辨率朗和,flags就是標(biāo)志位,depth是色深
分辨率很好理解暫時(shí)就不多BB了娜睛,flags具體見下表榄攀,如果不需要什么特性,就0

標(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è)沒有biang狂的窗口

convert函數(shù)試講圖像數(shù)據(jù)都轉(zhuǎn)化為surface對象,每次加載完圖像以后就應(yīng)該做這件事件(使用頻率很高让簿,如果你不寫敬察,pygame也會(huì)幫你寫);convert_alpha相比convert保留了ALPHA通道信息(就簡單理解為透明的部分),這樣就可以獲得PNG圖標(biāo)的效果尔当。

blit是一個(gè)重要函數(shù)莲祸。第一個(gè)參數(shù)是一個(gè)surface對象,第二個(gè)為左上角位置椭迎,畫完一個(gè)后要記得update更新一下锐帜,否則會(huì)出現(xiàn)畫面一片漆黑的情況。

blit(source, dest, area=None, special_flags = 0) -> Rect
        draw one image onto another
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畜号,一起剝皮案震驚了整個(gè)濱河市缴阎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌简软,老刑警劉巖蛮拔,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痹升,居然都是意外死亡建炫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門疼蛾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肛跌,“玉大人,你說我怎么就攤上這事⊙苌鳎” “怎么了转唉?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長西饵。 經(jīng)常有香客問我酝掩,道長,這世上最難降的妖魔是什么眷柔? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任期虾,我火速辦了婚禮,結(jié)果婚禮上驯嘱,老公的妹妹穿的比我還像新娘镶苞。我一直安慰自己,他們只是感情好鞠评,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布茂蚓。 她就那樣靜靜地躺著,像睡著了一般剃幌。 火紅的嫁衣襯著肌膚如雪聋涨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天负乡,我揣著相機(jī)與錄音牍白,去河邊找鬼。 笑死抖棘,一個(gè)胖子當(dāng)著我的面吹牛茂腥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播切省,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼最岗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朝捆?” 一聲冷哼從身側(cè)響起般渡,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芙盘,沒想到半個(gè)月后诊杆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡何陆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豹储。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贷盲。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巩剖,到底是詐尸還是另有隱情铝穷,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布佳魔,位于F島的核電站曙聂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鞠鲜。R本人自食惡果不足惜宁脊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贤姆。 院中可真熱鬧榆苞,春花似錦、人聲如沸霞捡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碧信。三九已至赊琳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砰碴,已是汗流浹背躏筏。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衣式,地道東北人寸士。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像碴卧,于是被迫代替她去往敵國和親弱卡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,849評論 25 707
  • 用兩張圖告訴你住册,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料婶博? 從這篇文章中你...
    hw1212閱讀 12,704評論 2 59
  • 文檔的這一部分解釋了Kyy設(shè)計(jì)背后的基本思想以及為什么要使用它。接著繼續(xù)討論架構(gòu)荧飞,并展示如何在短時(shí)間內(nèi)使用這個(gè)框架...
    大米zhu閱讀 1,149評論 0 1
  • 我曾經(jīng)有很嚴(yán)重的拖延癥凡人。 說一件自己的故事。 前幾年叹阔,我就想要跑步挠轴,我認(rèn)為跑步很好。 但是跑了幾天耳幢,發(fā)現(xiàn)自己的右腳...
    潘振杰閱讀 335評論 0 0
  • 吐魯番早上的太陽一出來就給你下馬威岸晦,似乎烈焰正在蓄勢帶噴欧啤,讓人感受到撲面而來的炙烤。酒店前臺(tái)說启上,這兒早上七點(diǎn)多氣溫...
    綠蘿寶貝閱讀 2,921評論 5 8