pygame的使用


Pygame的歷史

Pygame是一個利用SDL庫的寫就的游戲庫,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛寫的,據說他為了讓Loki(致力於向Linux上移植Windows的游戲的一家大好人公司,可惜已經倒閉,唉好人不長命啊……)更有效的工作,創造了這個東東。

SDL是用C寫的,不過它也可以使用C++進行開發,當然還有很多其它的語言,Pygame就是Python中使用它的一個庫。Pygame已經存在很多時間了,許多優秀的程序員加入其中,把Pygame做得越來越好。

安裝Pygame

可以從www.pygame.org下載pygame,選擇合適你的操作系統和合適的版本,當然你也可以使用pip安裝。安裝成功后可用下面方法確認有沒有安裝成功:

>>>import pygame
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
>>>

另外說一下,就產品而言,Pygame更致力於2D游戲的開發,也就是說,你可以用Pygame寫一個植物大戰僵屍,但是寫一個魔獸世界則相當困難……請不要做出鄙夷的目光,底層的東西永遠是相通的,而且對於新手而言,從簡單的2D入手才是正途。

使用Pygame

模塊名                                                     功能
pygame.cdrom                                       訪問光驅
pygame.cursors                                     加載光標
pygame.display                                   訪問設備顯示
pygame.draw                                    繪制形狀、線和點
pygame.event                                       管理事件
pygame.font                                         使用字體
pygame.image                                 加載和存儲圖片
pygame.joystick                          使用手柄或類似的東西
pygame.key                                     讀取鍵盤按鍵
pygame.mixer                                         聲音
pygame.mouse                                       鼠標
pygame.movie                                     播放視頻
pygame.music                                     播放音頻
pygame.overlay                             訪問高級視頻疊加
pygame.rect                                     管理矩形區域
pygame.sndarray                             操作聲音數據
pygame.sprite                                  操作移動圖像
pygame.surface                             管理圖像和屏幕
pygame.surfarray                         管理點陣圖像數據
pygame.time                                 管理時間和幀信息
pygame.transform                           縮放和移動圖像
有些模塊可能在某些平台上不存在,你可以用None來測試一下。

if pygame.transform is None:
    print 'The transform module is not available!'
    exit()

Hello Pygame
剛開始學習一門編程語言的時候總會寫一個Hello World程序,但那只是在終端上打印一句話,現在我們來點更帥的!寫好以后會是這樣子的效果:

 

 代碼如下:

# _*_ coding: utf-8 _*_
import pygame

from pygame.locals import *
from sys import exit
background_image_filename = 'sea.jpg'
mouse_image_filename = 'fish.png'

# 初始化pygame,為使用硬件做准備
pygame.init()

# 創建一個窗口
screen = pygame.display.set_mode((640, 480), 0, 32)

# 設置窗口標題
pygame.display.set_caption("hello,world!")

# 加載圖片並轉換
background = pygame.image.load(background_image_filename)
mouse_cursor = pygame.image.load(mouse_image_filename)

# 游戲主循環
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            # 接收到退出時間后退出程序
            exit()

    # 將背景圖畫上去
    screen.blit(background, (0, 0))

    # 獲得鼠標位置
    x, y = pygame.mouse.get_pos()
    # 計算光標左上角位置
    x -= mouse_cursor.get_width() / 2
    y -= mouse_cursor.get_height() / 2

    # 將光標畫上去
    screen.blit(mouse_cursor, (x, y))

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

這段代碼中用到了兩張圖片,圖片可以從網上找,讓后用ps簡單修改一下就行。(sea.jpg是背景,fish.png是黃色小魚,fish.png是我用ps摳出來的,背景是透明的)

下面稍微解釋一下比較重要的部分:

set_mode會返回一個Surface對象,代表了在桌面上出現的那個窗口,三個參數第一個為元祖,代表分 辨率(必須);第二個是一個標志位,具體意思見下表,如果不用什么特性,就指定0;第三個為色深。

標識位                                                      功能
FULLSCREEN                                  創建一個全屏窗口
DOUBLEBUF                              創建一個“雙緩沖“窗口,建議在HWSURFACE或OPENGL時使用
HWSURFACE                             創建一個硬件加速窗口,必須和FULLSCREEN同時使用
OPENGL                                     創建一個OPENGL渲染的窗口
RESIZABLE                                創建一個可以改變大小的窗口
NOFRAME                                  創建一個沒有邊框的窗口
convert函數是將圖像數據都轉化為Surface對象,每次加載完圖像以后就應該做這件事件(事實上因為 它太常用了,如果你不寫pygame也會幫你做);convert_alpha相比convert,保留了Alpha 通道信息(可以簡單理解為透明的部分),這樣我們的光標才可以是不規則的形狀。

游戲的主循環是一個無限循環,直到用戶跳出。在這個主循環里做的事情就是不停地畫背景和更新光標位置,雖然背景是不動的,我們還是需要每次都畫它, 否則鼠標覆蓋過的位置就不能恢復正常了。

blit是個重要函數,第一個參數為一個Surface對象,第二個為左上角位置。畫完以后一定記得用update更新一下,否則畫面一片漆黑。

這就是一個pygame程序的大致流程,接下來我們會學習更多深層次的東西,並且把各條語句都真正的讀懂。
參考:https://blog.csdn.net/qq_38526635/article/details/82688786


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM