pygame的一些基礎知識

1.照例,第一個helloworld程序;

     因爲pygame生成的程序爲交互式的,所以我們將標題設置爲helloworld

   

#coding=utf-8
import pygame
import sys
from pygame.locals import *

pygame.init()
display_surf = pygame.display.set_mode((400,300))
pygame.display.set_caption('hello world!')
while True:
    for event in pygame.event.get():
        if event.type ==QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()


其中import 導入sys 和pygame 模塊

而from pygame.locals import * 導入pygame 模塊的函數和值這樣就可以不用再要調用的值前面添加pygame.locals 比如程序中的QUIT值

pygame.init()   是調用pygame模塊時的初始函數,放在所有函數之前

display_surf 是pygame.display.set_mode((400,300))返回的一個pygame.Surface對象,而元組(400,300)代表屏幕設置的長寬

pygame.display.set_caption()當然就是設置的標題啦

然後pygame,.event.get() 就是獲取當前所有事件

然後判斷是不是需要退出,退出時一般先退出pygame模塊,然後在退出程序

因爲程序是交互式的,理所當然的要快速刷新界面,pygame.display.update()就是把surface對象不斷地顯示到屏幕,surface對象沒變,所以屏幕一直是黑色的,因爲是一直不停的刷新,所以要一直循環

2.一些定義問題;

  (1).像素座標的問題,我們的電腦屏幕是有一個個像素點組成的,所以我們設置窗口長寬時一般都是設置的多少個像素,像素座標用的是笛卡爾座標系統,即原點在左上方,然後,然後向下爲y,向右爲x

 (2).關於顏色的問題pygame採用RGB顏色,即通過紅綠藍來顯示顏色,每一種顏色的值爲0-255,所以顏色一般由三個值組成,pygame中還有一個值爲透明度,當沒有透明度時,顏色就會覆蓋掉原來的顏色,而當我們設置透明度時就會在原來的顏色基礎上加一個顏色,比如我們用紅色透鏡看物體,會在所有的物體上加一個紅光;

 (3).Surface對象是表示的一個矩形2D圖像的對象,我們可以通過pygame函數來改變surface來顯示到窗口,但標題欄和邊框並屬於surface,如helloworld程序中,我們的set_Mode函數就返回一個surface對象,叫做顯示surface;

    顯示surface並不能直接用顏色的透明度,即我們通過,another_surface = surface.convert_alpha()來獲取一個surface,然後 進行操作

 (4)pygame.Color對象,因爲顏色使用RGB表示所以pygame.Color 對象爲一個元組具有三個或四個整數,程序需要傳入一個Color對象時我們可以用my_color = pygame.Color(255,0,0,122) 來生成一個color對象,當然我們也可以直接傳入一個元組(255,0,0,122);

 (5)pygame.Rect()也爲一個元組,代表一個矩形區域,例如my_rect = pygame.Rect(10,10,400,300)就代表左上角座標爲(10,10)的長爲400寬爲300的一個矩形區域,並且rect對象可以計算其他點的座標,如my_rect.right 爲410,當然如果my_rect.right重新賦值那麼,矩形區域的個點座標將會被重新計算

3.一些基本的繪製函數;

 (1).pygame.Surface對象的fill方法傳入一個顏色值將顏色填充到整個對象

 (2).pygame.draw.polygon(surface,color,pointList,width),意思就是將pointList中的點用color顏色寬度爲width的線在surface上畫多邊形,當不添加width時,圖形爲填充的

 (3).pygame.draw.line(surface,color,start_point,end_point,width)

       pygame.draw.lines(surface,color,closed,pointList,width) :繪製從一個點到下一個點的線,當closed傳入False將不會繪製第一個點和最後一個點的連線

       pygame.draw.circle(surface,color,center_point,radius,width)

       pygame.draw.ellipse(surface,color,rect,width):rect 指的是橢圓所佔矩形區域的大小

       pygame.draw.rect(surface,color,rect,width) 繪製矩形

4.pygame.PixelArray();

  用來獲取圖像每一個像素點,返回一個像素數組,每一個值都是一個元組可以更改每一個像素的顏色,如pixel_array = pygame.PixelArray(my_surface),pixel_array[200][300]=(255,0,255)

5.pygame產生動畫;

   pygame產生動畫的原理就是不斷地刷新圖像,比如我們用一個小圖片來移動,我們只要把每一次圖片放在不同位置然後反覆刷新即可

   例如產生動畫效果

   

#coding=utf-8
import pygame
import sys
from pygame.locals import *

pygame.init()
display_surf = pygame.display.set_mode((400,400))
pygame.display.set_caption('hello world!')
img = pygame.image.load('hh.png')
x,y = 10,10
FPS = 60
direction = 'right'
while True:
    display_surf.fill((255,255,255))
    if direction == 'right':
       x+=1
       if x>380:
          direction='down'
    elif direction=='down':
       y +=1
       if y>380:
          direction='left'
    elif direction=='left':
       x -=1
       if x<10:
          direction='up'
    elif direction=='up':
       y -=1
       if y<10:
          direction='right'
                       
    for event in pygame.event.get():
        if event.type ==QUIT:
            pygame.quit()
            sys.exit()
    display_surf.blit(img,(x,y))
    pygame.display.update()
    pygame.time.Clock().tick(FPS)

  (1).幀速率是每秒程序繪製圖像的數目

   (2).pygame.time.Clock()可以控制程序的刷新速度,例如fpsClock = pygame.time.Clock(),       fpsClock.tick(30)就是代表最大刷新速度爲30幀每秒,而在循環中調用tick函數,就是通過上一次調用tick()到當前時間還需要暫停多長時間

   (3)pygame.image.load()導入圖像返回一個surface對象

   (4).display_surf .blit(img,point):代表將img複製到display_surf中,左上角在point處

6.pygame字體

  第一步創建一個font對象,第二步生成字體的surface對象,第三步,獲取字體的rect,並設置中心位置,第四步,將字體surface對象blit到display_surf上,如:

 

my_font = pygame.font.Font('mo.ttf',32)
text_surf = my_font.render(u'你好!',True,(0,0,0))
rect = text_surf.get_rect()
rect.center=(200,200)
while True:
    display_surf.fill((255,255,255))
    display_surf.blit(text_surf,rect)

  其中mo.ttf是字體文件

7.pygame播放音樂

  (1).播放普通音樂

sound = pygame.mixer.Sound('haha.wav')
sound.play()
import time
time.sleep(10)
sound.stop()

(2).播放背景音樂

   

<pre name="code" class="python">pygame.mixer.music.load('background.wav')
pygame.mixer.music.play(-1,0.0)


pygame.mixer.music.stop()

-1代表無限循環,0.0代表從頭播放,如果爲一個浮點數大於0,如12.7,會讓音樂從開始播放到文件12.7秒結束


<------------------------------->內容爲學習《Making Games with Python and Pygame》一書所做筆記

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