1. 程式人生 > >pygame學習教程(一)pygame介紹引自官網

pygame學習教程(一)pygame介紹引自官網

網上有很多pygame的教程,我寫這個系列是因為我在學習的過程中響起當年Win32程式設計,自己編寫Form,Message,事件響應。雖然現在已經有很多方法可以幫我們實現這些,如果自己寫一遍會體會很深。
第一篇介紹。
https://www.pygame.org/docs/tut/PygameIntro.html 原文連結
This article is an introduction to the pygame library for Python programmers. The original version appeared in the Py Zine, volume 1 issue 3. This version contains minor revisions, to create an all-around better article. Pygame is a Python extension library that wraps the SDL library and its helpers.
本文是針對Python程式 pygame庫。原始版本出現在Py Zine第1卷,第3期。這個版本包含了一些小的修改,以建立一個全面的更好的文章.PyGames是一個Python擴充套件庫,它封裝了SDL庫及其助手。
HISTORY
Pygame started in the summer of 2000. Being a C programmer of many years, I discovered both Python and SDL at about the same time. You are already familiar with Python, which was at version 1.5.2. You may need an introduction to SDL, which is the Simple DirectMedia Layer. Created by Sam Lantinga, SDL is a cross-platform C library for controlling multimedia, comparable to DirectX. It has been used for hundreds of commercial and open source games. I was impressed at how clean and straightforward both projects were and it wasn’t long before I realized mixing Python and SDL was an interesting proposal.
歷史¶
Pygame始於2000年夏天。作為一名多年的C程式設計師,我幾乎同時發現了Python和SDL。Python當時版本為1.5.2。您可能需要介紹SDL,這是一個簡單的DirectMedia層。SDL由SamLantinga建立,是一個用於控制多媒體的跨平臺C庫,類似於DirectX。它已經被用於數百個商業和開源遊戲。令我印象深刻的是,這兩個專案是多麼乾淨和簡單,不久我就意識到將Python和SDL混合是一個有趣的提議。
後面的翻譯都在程式裡。
TASTE
I find the best way to understand a new library is to jump straight into an example. In the early days of pygame, I created a bouncing ball animation with 7 lines of code. Let’s take a look at a friendlier version of that same thing. This should be simple enough to follow along, and a complete breakdown follows.
嘗試
我發現理解一個新庫的最好方法是直接進入一個例子。在遊戲的早期,我用7行程式碼建立了一個彈跳球動畫。讓我們看一看同樣的東西更友好的版本。這應該是足夠簡單的跟隨,然後是一個完整的細分
後面的翻譯我都寫到程式的註釋。
在這裡插入圖片描述


下面是程式碼

#coding:utf8
import sys, pygame #mport pygame匯入包含所有可供使用的遊戲模組的包。
import time

pygame.init()       #呼叫 pygame.init()初始化這些模組中的每一個。

size = width, height = 320, 240
speed = [1, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)
'''
PyGames和SDL通過預設圖形硬體的最佳圖形模式來簡化這一模式。您可以過載該模式,
SDL將補償硬體無法做的任何事情。PyGames將影象表示為表面物品。display.set_mode()函式建立一個
新的Surface 物件,該物件表示實際顯示的圖形。Surface物件實現在顯示器上畫圖
'''


ball = pygame.image.load("intro_ball.gif")
'''
載入我們的球影象。PyGames通過SDL_Image庫支援多種影象格式,包括BMP、JPG、PNG、TGA和GIF。
'''
ballrect = ball.get_rect()
'''
pygame.image.load()函式返回一個帶球資料的曲面。Surface將保留檔案中的任何顏色鍵或alpha透明度。
載入球影象後,我們建立一個名為Ballrect的變數。PyGames附帶了一個方便的實用程式物件型別,名為rect,表示矩形區域
'''

while 1:
    '''
    我們的程式已經初始化並準備執行。在無限迴圈中,我們檢查使用者的輸入,移動球,然後畫球
    。如果您熟悉GUI程式設計,那麼您就有過事件和事件迴圈的經驗。在玩偶遊戲中,這沒有什麼不同,    
    '''
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        #我們檢查一下退出事件已經發生了。如果是這樣,我們可以退出程式,
    ballrect = ballrect.move(speed)
    #move (x,y)方向移動
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
    '''
    是時候更新我們的位置了。第17行到第21行以當前速度移動球拍變數。
    如果球在螢幕外移動,我們就向那個方向倒轉速度。    
    '''
    time.sleep(0.005)
    screen.fill(black)
    '''
    我們通過填充黑色RGB顏色來擦除螢幕。如果您從未使用過動畫,這可能看起來很奇怪。
    你可能會問:“為什麼我們要擦除任何東西,為什麼我們不直接移動螢幕上的球呢?”
    這並不完全是計算機動畫的工作方式。動畫只不過是一系列的單一影象,當按順序顯示時,
    就能很好地欺騙人的眼睛去看運動。螢幕只是使用者看到的一個影象。如果我們不花時間把
    球從螢幕上擦除,我們就會看到球的“軌跡”,因為我們不斷地在它的新位置上畫球。可以試著註釋掉 screen.fill(black)看看效果
    '''
    screen.blit(ball, ballrect)
    pygame.display.flip()
    '''
    我們需要做的最後一件事實際上是更新可見的顯示。PyGames使用雙緩衝區管理顯示。當我們完成繪圖時,
    我們呼叫pygame.display.flip()將完整顯示面更新到螢幕上方法。這使得我們在螢幕表面繪製的所有內容
    都變得可見。這種緩衝確保我們只在螢幕上看到完全繪製的幀。
    這是對電子遊戲的簡短介紹。PyGames還有一些模組可以為鍵盤、滑鼠和操縱桿進行輸入處理。它可以混合音
    頻和解碼流媒體音樂。帶著曲面您可以繪製簡單的形狀,旋轉和縮放圖片,甚至可以實時地像Numpy陣列一樣
    操作影象的畫素。PyGames還可以充當PyOpenGL的跨平臺顯示層。大多數遊戲模組都是用C編寫的,
    很少是用Python編寫的
    
    pygame網站為每個遊戲功能提供了完整的參考文件,併為所有範圍的使用者提供了教程。這款遊戲的來源有很多類似於
    猴子出拳和UFO射擊的例子。
    
    “Python適合玩遊戲嗎?”答案是,“這取決於遊戲。”

    Python實際上很有能力運行遊戲。它甚至可能會讓你驚訝於在30毫秒內有多大的可能。不過,一旦你的遊戲開始變得更加複雜,
    就不難達到上限。任何實時執行的遊戲都將充分利用計算機。
    
    在過去的幾年裡,遊戲發展出現了一個有趣的趨勢,即向更高層次的語言發展。通常一個遊戲被分成兩個主要部分。遊戲引擎,
    這必須是儘可能快,和遊戲邏輯,這使引擎實際上做了些什麼。不久前,一個遊戲的引擎是在程式集中編寫的,部分是用C編寫的。
    現在,C已經轉移到了遊戲引擎中,而遊戲本身通常是用更高階的指令碼語言編寫的。像Quake3和Unreal這樣的遊戲以可移植程式碼的
    形式執行這些指令碼。portable bytecode(可移植程式碼)看看這篇    https://yq.aliyun.com/articles/62690
    
    2001年初,developer Rebel Act工作室完成了他們的遊戲,Severance:黑暗之刃。使用他們自己定製的3D引擎,遊戲的其餘部分都是
    用Python編寫的。遊戲是一個血腥的行動,第三人視角的拳擊手。在探索地牢和城堡時,你可以控制中世紀戰士進行復雜的斬首組合
    攻擊。您可以下載這個遊戲的第三方外掛,並發現它們只不過是Python原始檔。
    
    最近,Python已經被用於各種遊戲,如Freedom Force(自由力量), 和 Humungous Backyard Sports (巨大後院運動)系列
    玩遊戲是相當低的水平,當涉及到編寫遊戲。您很快就會發現自己需要將常見的功能打包到自己的遊戲環境中。最棒的是,遊戲裡沒有
    什麼東西能阻擋你。你的程式完全控制著一切。這樣做的副作用是,您會發現自己借用了大量程式碼來獲得一個更高階的框架。你需要更
    好地理解你在做什麼。
    
    開發遊戲是非常有價值的,能夠看到並與您編寫的程式碼進行互動是一件令人興奮的事情。派克目前有近30個其他專案使用它。他們中有幾個已
    經準備好玩了。您可能會訪問這個遊戲網站,看看其他使用者能夠使用Python做些什麼。

    吸引我注意的一件事是第一次使用Python來嘗試遊戲開發的人的數量。我明白為什麼遊戲會吸引新程式設計師,但這可能會很困難,因為建立遊戲需
    要對語言有更深刻的理解。我試圖通過為這些概念的新手編寫許多示例和遊戲教程來支援這一群使用者。
    
    最後,我的建議是保持簡單。我怎麼強調都不為過。如果你計劃建立你的第一個遊戲,有很多需要學習的地方。即使是簡單的遊戲也會挑戰你的設計,
    複雜的遊戲不一定意味著有趣的遊戲。當您理解Python時,您可以在一到兩週內使用pyGames
    建立一個簡單的遊戲。從那裡,你將需要一個驚人的時間雕琢細節,使之成為一個完整的遊戲。
    引自https://www.pygame.org/docs/tut/PygameIntro.html
    '''

下一篇