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
    '''

下一篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章