1.pygame第一步

pygame框架簡介

對於pygame的介紹,在網上真的基本上千篇一概,大多會感慨感謝一下做者,可惜一下這個包在09年的時候就中止更新(可是它神奇地在17年1月份更新了)。真正的它的意義,不多人說起。下面引用一下《pygame菜鳥入門指南》裏的一段介紹:python

pygame是一個由Pete Shinners編寫的SDL的Python封裝。這就意味着,使用pygame,你能夠寫出能夠不做修改就能夠在任何支持SDL的平臺(Windows, Unix, Mac, BeOS,等等)上運行的遊戲或者多媒體程序。linux

簡單的理解一下,它的底層是使用C編寫的SDL(simple DirectMedia Layer)。提供了多種控制凸顯個、聲音、輸出入得函數。讓開發者是要用相同或者是類似的代碼就能夠開發出跨多個平臺(linux、windows、mac OS X等)的應用軟件。目前SDL多用於開發遊戲,模擬器,媒體播放器等多媒體應用領域……shell

SDL內置調用了OpenGL的函數。……SDL也有其餘語言的包裝,SDL用C語言寫成,可是很容易在C++下工做,而且綁定了許多其餘的語言……包裝的比較好的是python語言的pygame……windows

在我省略了好多……以後,pygame和SDL和OpenGL的關係漸漸明朗了起來。雖然沒有對pygame的能力有很詳細的描述,可是也能簡單瞭解它的主要應用場景和主要的功能。框架

安裝

超簡單,若是有完整的python開發環境,這個應該不是什麼問題。函數

pip install 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.sndarry 操做聲音數據
pygame.sprite 操做移動圖像
pygame.surface 管理圖像和屏幕
pygame.surfarry 管理點陣圖像數據
pygame.time 管理時間和幀信息
pygame.transform 縮放和移動圖像

其中一些我以爲比較重要的或者在初級使用階段會常常碰到的一些字段,我都添加了標記,在以後的學習中能夠重點關注一下這一塊的源碼。學習

有些模塊可能在某些平臺上不存在(有這個名稱字段,可是爲空),能夠用None判斷一下。字體

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

詳解一個簡單的pygame程序

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

import pygame
#導入pygame庫
from pygame.locals import *
#導入一些經常使用的函數和常量
from sys import exit
#向sys模塊借一個exit函數用來退出程序

pygame.init()
#初始化pygame,爲使用硬件作準備

screen = pygame.display.set_mode((640, 480), 0, 32)
#建立了一個窗口
pygame.display.set_caption("Hello, World!")
#設置窗口標題

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

while True:
#遊戲主循環

    for event in pygame.event.get():
        if event.type == QUIT:
            #接收到退出事件後退出程序
            exit()
            #這個負責監聽事件的循環很是重要,是event模塊在pygame程序中最頻繁的使用

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

    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()
    #刷新一下畫面

上面的程序其實註釋已經很是詳盡了,咱們有幾點須要注意的:code

  • set_mode():他會返回一個surface對象,表明了在桌面上出現的那個窗口,從源碼中能夠看到:
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
   Initialize a window or screen for display

它須要三個參數,resolution就是分辨率,flags就是標誌位,depth是色深
分辨率很好理解暫時就很少BB了,flags具體見下表,若是不須要什麼特性,就0orm

標誌位 功能
FULLSCREEN 建立一個全屏窗口
DOUBLEBUF 建立一個「雙緩衝」窗口,建議在HWSURFACE或者OPENGL時使用
HWSURFACE 建立一個硬件加速的窗口,必須和FULLSCREEN同時使用
OPENGL 建立一個OPENGL渲染的窗口
RESIZABLE 建立一個能夠改變大小的窗口
NOFRAME 建立一個沒有biang狂的窗口

convert函數試講圖像數據都轉化爲surface對象,每次加載完圖像之後就應該作這件事件(使用頻率很高,若是你不寫,pygame也會幫你寫);convert_alpha相比convert保留了ALPHA通道信息(就簡單理解爲透明的部分),這樣就能夠得到PNG圖標的效果。

blit是一個重要函數。第一個參數是一個surface對象,第二個爲左上角位置,畫完一個後要記得update更新一下,不然會出現畫面一片漆黑的狀況。

blit(source, dest, area=None, special_flags = 0) -> Rect
        draw one image onto another
相關文章
相關標籤/搜索