創建你的第一個遊戲

Adobe Flash Builder 4 簡體中文正式版 Windows版點擊下載:http://g.csdn.net/5134151
Adobe Flash Builder 4 簡體中文正式版 Mac版點擊下載 :http://g.csdn.net/5134152
Adobe 在線課堂:http://adobev.csdn.net/zx/index.html
Adobe平臺技術峯會課程視頻:http://adobev.csdn.net/

 

 

這個標題有些不太準確,因爲我們離實際創建人們所瞭解的遊戲尚有一段距離。在本文中,我們將講解如何創建遊戲中的對象 –  Pushbutton引擎 的用語,它們被稱爲 實體( Entities

性能,性能,還是性能  與其他形式的開發不同,性能和速度是遊戲開發的基石。如果一個遊戲執行地不好,或運行遲緩,則不管一款遊戲理念有多偉大,多數人還是會轉而尋求更好的選擇。遊戲實體一般是組合對象,   其繼承鏈很淺。

這會帶來大量的好處。通過保持較淺的繼承鏈 基類 中移除一次或兩次 ,你創建的對象就不會充斥那些永遠不可能用到的代碼。如果你需要爲兩個或更多不相關但需要相同功能的繼承鏈添加不相關的功能,它還可避免繁重的重構作業。這就要涉及組合。通過組合對象,你可輕鬆地添加或移除每個實體類型需要的功能。較之具有膨脹的潛在風險的繼承鏈,這種繼承鏈更爲穩定有效。

我會在將來的文章中詳述這一點,但我只想對通過 Pushbutton引擎 創建和管理遊戲項目的方法背後的理論進行簡要的解釋。讓我們介紹如果通過創建一個簡單實體來開始使用 PBE

啓動 PBE
第一件事就是根據我在前面的 “Setting Up Your IDE” (創建你的IDE )一文中的說明 如果你想要使用 MXML ,我將另做一文進行介紹)創建一個 ActionScript 基本文件。和很多庫一樣, Pushbutton引擎 可爲你提供的東西可多可少,取決於你對它堆肥熟練程度;當你對其更加熟悉後,將可以進一步探索其中,以便使其用起來更加得心應手。但是現在,我們只是介紹一些用於創建簡單地互動演示的基本的構築元素。

首先我們要創建兩個項目 –  一個場景和一個遊戲玩家 後面再介紹敵人)。把場景看做一個容器,你可以在其中放入所有的遊戲對象。場景可不止一個,如果你願意,可以創建無窮個場景。創建一個 sceneView (場景)實例並不費事。首先,你需要創建一個 SceneView 類,並設置其寬度和高度 –  非常簡單。你還可給場景命名,就緒後,將其傳至 PBE 主類進行初始化 如下編碼所示)

 

 

1

2

3

4

5

6

7

8

9

protected  function  initializeScene () : void

{

_sceneView =  new  SceneView () ;

_sceneView. name  =  "mainView" ;

_sceneView. width  =  800 ;

_sceneView. height  =  480 ;

 

PBE. initializeScene ( _sceneView ) ;

}

你可能會問 PBE 是什麼。它就是 Pushbutton引擎 的主類,對整個遊戲進行管理。如你所見,場景被傳至 PBE 類的 initializeScene( 方法中。如程序說明書中所述:

這一類做出有些關於展示什麼元素和模塊的假設。如果你要做一些奇怪的東西,你可能需要直接訪問這一類爲你製作的東西 。但是,如果你的工作剛剛開始,這可能是一個非常有用的工具包。”

補充遺漏的最後幾項
在對新添加的場景進行測試前,你需要爲你的 基類 添加一些東西。首先你需要定義你要創建的 SWF 的實際尺寸。要進行這一工作,可將你的 文檔類 頂部的 SWF 元數據標籤設置如下:

1

[ SWF ( width = "800" height = "480" , frameRate= "60" )]

注意,場景所用尺寸和實際 SWF 尺寸一般是相同的,因此有些值是重疊的。最後一步是告訴 PBE 你想要啓動 引擎 。只需調用 PBE.startup( 並將其傳至你的遊戲的主類,如下所示:

1

PBE. startup ( this ) ;

需要注意的一點是,   主類需要從 Sprite (精靈)處繼承  –  和大多數事物一樣,這不應存在問題,因爲你不僅僅需要通過該關鍵詞將其傳至你的應用軟件的主 文檔類 。你還需要確保 PBE.startup( 被首先調用(一般在構造函數中)。如果你不首先調用它,則可能導致過多的空引用錯誤 –  因爲沒有創建出任何一個內置幫助文件。 雖然我本人清楚這點,但還是值得一提。

當前的代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

package

{

import  com. pblabs . engine . PBE ;

import  com. pblabs . engine . entity . IEntity ;

import  com. pblabs . engine . entity . allocateEntity ;

import  com. pblabs . rendering2D . ui . SceneView ;

 

import  flash. display . Sprite ;

 

[ SWF ( width = "800" height = "600" , frameRate= "60" )]

public   class  Main  extends  Sprite

{

 

public   function  Main ()

{

PBE. startup ( this ) ;

initializeScene () ;

}

 

protected  function  initializeScene () : void

{

var  _sceneView:SceneView =  new  SceneView () ;

_sceneView. name  =  "MainView" ;

_sceneView. width  =  800 ;

_sceneView. height  =  600 ;

 

PBE. initializeScene ( _sceneView ) ;

}

      }

}

然後進行測試。很令人吃驚是不是?我知道你只是看到一個黑屏。這是因爲我們還沒有在屏幕上添加任何東西。接下來讓我們添加一個簡單地精靈來代表遊戲玩家。 

添加實體 
如前所述, Pushbutton引擎 中的所有對象都稱爲實體。不僅如此,不久你還會瞭解到某些實體是怎麼稱呼 / 指代的。例如,遊戲玩家被稱爲主角。另外,當我們開始介紹實體的組合時,你會發現這中通用命名慣例也適用其中。如果你不喜歡,也不要覺得必須按照這個規矩做。你也可以對你的變量進行自由命名。需要注意的是,範例代碼遵循的是這種通用命名法。

現在來看如何將一個實體拖動並添加至場景中。首先,你需要配置實體。這項工作可通過調用 allocateEntity( 來完成,而不是使用新的關鍵詞。其原因有兩個。首先,創建對象是一項“昂貴”的過程 記不記得我曾經提到過速度和性能),採用 allocateEntity ,可訪問隱藏的實體類,並調用一個實例。第二,它能通過對象池進行靈活的再利用。如果你要在屏幕上創建大量的敵人,這就非常有用。   當它們被摧毀後,不用創建新的敵人,只需從對象池中再利用“已死”的敵人就可以了。 

配置了實體後,你需要對其進行初始化,方可進行使用。只需調用實體的 initialize( method 。從下列代碼中可以看出主角實體是如何配置和初始化的。

1

2

3

4

5

6

protected  function  initializePlayer () : void

{

var  _hero:IEntity = allocateEntity () ;

 

_hero. initialize ( "Hero" ) ;

}

這樣看上去不錯,但是這還只是一個敵人實體,因此我們需要進行組合,賦予其一些屬性。首先,讓我們通過一種空間( Spatial )元素來爲其提供形態中 在這裏,該空間元素是一種簡單空間元素( SimpleSpatialComponent )。空間元素背後的原理是,它們主要負責將實體放在環境中 如果願意,你可以爲其提供其自身的空間。 

1

2

3

4

5

6

7

8

9

10

11

12

13

protected  function  initializePlayer () : void

{

var  _hero:IEntity = allocateEntity () ;

 

var  _spatial:SimpleSpatialComponent =  new  SimpleSpatialComponent () ;

_spatial. size  =  new  Point ( 100 100 ) ;

_spatial. position  =  new  Point ( 0 0 ) ;

_spatial. spatialManager  = PBE. spatialManager ;

 

_hero. addComponent ( _spatial,  "Spatial" ) ;

 

_hero. initialize ( "Hero" ) ;

}

觀察已經添加的空間代碼,你會發現爲實體添加元素的基本步驟:

·  創建一個元素實例;

·  設置所需的元素參數;  

·  將元素添加至實體; 

·  重複以上步驟。

對於空間代碼,我想要強調其與一般 ActionScript 應用軟件的區別,這與位置有關。 Pushbutton引擎 中的位置是不同的,因爲註冊點 0,0 實際上是可見區的一個死點,而不是傳統基於 Flash 的內容中的左上點。因此,當設置一個實體的初始位置時,如果需要將其置於左上,記得要使用負值。 

既然我們的實體存在於實際場景中,我們就需要賦予其一定的形態,因爲它沒有任何圖形表示,所以目前還是“看不見的”。只需爲其添加另一個元素即可。在這裏,該元素是一個渲染器元素。渲染器元素有多種外觀,但我們現在看到的這種是簡單形狀渲染器( SimpleShapeRenderer )。顧名思義,它可便於你爲實體添加形狀。比如,要創建一個正方形的步驟如下: 

1

2

3

4

5

6

7

8

9

10

11

12

13

var  _renderer:SimpleShapeRenderer =  new  SimpleShapeRenderer () ;

_renderer. fillColor  = 0x000000;

_renderer. fillAlpha  =  1 ;

_renderer. lineAlpha  =  0 ;

_renderer. isSquare  =  true ;

_renderer. isCircle  =  false ;

_renderer. scene  = PBE. scene ;

 

_renderer. sizeProperty  =  new  PropertyReference ( "@Spatial.size" ) ;

_renderer. positionProperty  =  new  PropertyReference ( "@Spatial.position" ) ;

_renderer. rotationProperty  =  new  PropertyReference ( "@Spatial.rotation" )

 

_hero. addComponent ( _renderer,  "Renderer" ) ;

這樣你的渲染器元素可對空間元素的改變做出反應 這裏,這種改變指其大小、位置或旋轉的變化。你也可以在你自己的元素中創建用於控制它們(及其他屬性)的方法,這樣使得實際元素及其所含引用可易於從你的實體中“熱插拔”。同時,它還可提高再利用率,並避免實體與其元素之間形成不牢固的關係。

完成 
現在已經有了場景和“主角”,你可以再次運行你的遊戲。一旦運行了代碼,你會在屏幕正中看到一個漂亮的黑色正方形。這雖然不是什麼驚人的成就,但是一個很好的開始,你得先學會走,才能學跑,不是嗎? 

我將完整的代碼表和實際 Flash Builder項目 列在下方:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

package

{

      import  com. pblabs . engine . PBE ;

      import  com. pblabs . engine . entity . IEntity ;

      import  com. pblabs . engine . entity . PropertyReference ;

      import  com. pblabs . engine . entity . allocateEntity ;

      import  com. pblabs . rendering2D . SimpleShapeRenderer ;

      import  com. pblabs . rendering2D . SimpleSpatialComponent ;

      import  com. pblabs . rendering2D . ui . SceneView ;

 

      import  flash. display . Sprite ;

      import  flash. geom . Point ;

 

      [ SWF ( width = "800" height = "600" , frameRate= "60" )]

      public   class  Main  extends  Sprite

      {

           public   function  Main ()

           {

               PBE. startup ( this ) ;

 

               initializeScene () ;

               initializePlayer () ;

           }

 

          protected  function  initializeScene () : void

           {

                var  _sceneView:SceneView =  new  SceneView () ;

               _sceneView. name  =  "MainView" ;

               _sceneView. width  =  800 ;

               _sceneView. height  =  600 ;

 

               PBE. initializeScene ( _sceneView ) ;

           }

 

          protected  function  initializePlayer () : void

           {

                var  _hero:IEntity = allocateEntity () ;

 

                var  _spatial:SimpleSpatialComponent =  new  SimpleSpatialComponent () ;

               _spatial. size  =  new  Point ( 100 100 ) ;

               _spatial. position  =  new  Point ( 0 0 ) ;

               _spatial. spatialManager  = PBE. spatialManager ;

 

               _hero. addComponent ( _spatial,  "Spatial" ) ;

 

                var  _renderer:SimpleShapeRenderer =  new  SimpleShapeRenderer () ;

               _renderer. fillColor  = 0x000000;

               _renderer. fillAlpha  =  1 ;

               _renderer. lineAlpha  =  0 ;

                _renderer. isSquare  =  true ;

               _renderer. isCircle  =  false ;

               _renderer. scene  = PBE. scene ;

 

               _renderer. positionProperty  =  new  PropertyReference ( "@Spatial.position" ) ;

               _renderer. rotationProperty  =  new  PropertyReference ( "@Spatial.rotation" ) ;

 

                _hero. addComponent ( _renderer,  "Renderer" ) ;

 

               _hero. initialize ( "Hero" ) ;

           }

      }

}

我列出了 ActionScript 項目 如下 這是在 Flash Builder Burrito 中創建的,儘管本應在 Flash Builder 4 中工作)。如果你使用的是 Flash Professional ,只需將 ActionScript 主類從 zip 文件中抓出即可  –  或使用以上代碼。

相關文件
PBE001_GettingStarted.zip

 

 

 

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