python遊戲引擎ppb介紹(2)精靈、場景與座標

聖手書生肖讓發表於2020-11-04

精靈(sprite)就是在螢幕上顯示的一切事物,場景(scene)可以簡單理解為螢幕,螢幕上的具體位置通過座標來表示。

http://p26-tt.byteimg.com/large/pgc-image/9fab7500d24a4c67960787d7bbf907a9

靜態精靈

ppb中的精靈定義很有特色,非常簡單。它可以直接對應一個外部的png檔案。如果我們有這樣一個圖片,名字叫Target.png

http://p1-tt-ipv6.byteimg.com/large/pgc-image/76ccff105f9d4eafabfbe0c5575ef76b

我們只需定義一個同名的類,無須任何實際的程式碼,即可成為一個靜態精靈:

class Target(ppb.Sprite):

    pass

 

注意精靈的預設大小是1,這個1,不是一個畫素,而是一個座標單位,詳見下面場景與座標。

動態精靈

動態精靈的定義也很簡單,比如我們有下面一組圖片:

http://p3-tt-ipv6.byteimg.com/large/pgc-image/a2f2d8918d4f4a6b9678cbb156b388a5

blob_0

http://p1-tt-ipv6.byteimg.com/large/pgc-image/d03c52e9285648d0800384f1384729da

blob_1

http://p26-tt.byteimg.com/large/pgc-image/f963ed65c0dd482fa6c0643061ace0a6

blob_2

http://p3-tt-ipv6.byteimg.com/large/pgc-image/377eaeaec9084b7e88449d0b74b1a26f

blob_3

http://p1-tt-ipv6.byteimg.com/large/pgc-image/7bb13d01fc634997a4e7ddd99b60d4c5

blob_4

http://p9-tt-ipv6.byteimg.com/large/pgc-image/ae333e00f6f449739a812192c26cbbde

blob_5

http://p1-tt-ipv6.byteimg.com/large/pgc-image/83d52eb51ce943f89270b205771b6f57

blob_6

一共七張,依次命名為blob_0~blob_6,我們只需定義一個精靈,並指定它的圖片序列如下:

class Blob(ppb.Sprite):

    image = Animation("blob_{0..6}.png", 10)

 

其中最後一個引數10,含義是每秒10幀,它可以用來調節精靈運動的速度。

場景與座標

我們把場景簡單理解為精靈的舞臺,為了顯示精靈,只需把精靈加入到這個舞臺上即可。

def setup(scene):

    scene.add(Blob(pos=(0, -3.5)))

    for x in range(-4, 5, 2):

       scene.add(Target(position=ppb.Vector(x, 3)))

 

精靈的座標,統一用向量(Vector)來表示。座標的單位,不是畫素,而是一個單位,這個單位的大小,由相機(camera)的設定來指定,預設狀態是寬度的1/25,即螢幕的寬度為25個單位,最左邊是-12.5,最右邊是12.5。數字的選擇大概也沒有什麼特別的理由,只是系統的一個預設而已。

在這段程式碼中我們在場景中放置了一個Blob精靈,位置(pos)定製在正中偏下的位置(0-3.5,另外放置了5個靶子,位置分別是(-4,2)(-2,2)(0,2)(2,2)(4,2)。

程式碼展示了設定位置的兩種方式,設定pos/postion屬性,可以用一個元組,或者更明確地用一個向量(ppb.Vector)來表示。

完整程式碼如下:

import ppb

from ppb.features.animation import Animation



class Blob(ppb.Sprite):

    image = Animation("blob_{0..6}.png", 10)



class Target(ppb.Sprite):

    pass



def setup(scene):

    scene.add(Blob(pos=(0, -3.5)))

    for x in range(-4, 5, 2):

       scene.add(Target(position=ppb.Vector(x, 3)))





ppb.run(title='小遊戲',setup=setup,resolution=(1280, 768))

 

執行效果是這樣:

http://p26-tt.byteimg.com/large/pgc-image/7374f9751bcf4576aea0819b5bdc5568

本節教程到此為止,下次我們讓精靈動起來。

 

 

相關文章