2013-03-05 160 views
0

好的。我有一个关于AS3游戏结构的问题。如何构建简单的射击游戏。游戏结构设计

我有一个主要的英雄和船只射击bulets。我想添加两个级别,但我不知道如何正确地构造它们或者哪种方式是正确的。

我有一个主要的类,包含一切,并应该切换低谷级别。所以我把每个级别作为一个单独的班级分开。

示例代码

package 
{ 
    // imports 

    public class Main extends Sprite 
    { 
     // properties 
     private var testLevel:Level1; 

     public function Main():void 
     { 
    if (stage) init(); 
    else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

     private function init(e:Event = null):void 
    { 
      testLevel = new Level1(); 
      addChild(testLevel); 
     } 
    } 
} 

// Level1 code 
package Levels 
{ 
    // imports 
    public class Level1 extends Sprite 
{ 
     // properties 
     private var ship:Ship; 

     public function Level1(stage:Object) 
    { 
      // do some stuff 
      addEventListener(Event.ENTER_FRAME, onEnterFrame); 
     } 

     public function onEnterFrame(e:Event):void 
    { 
       // do some stuff 
     } 

    } 
} 

所以,根据这个代码,我的问题是:我应该使用内船舶单独ENTER_FRAME功能加上船子弹或者我应该将它们添加在一级循环?

我可以做到两种方式,但是对于性能和表达更好,因为我打算在bulet达到sceen的末尾或者命中Hero时添加一些动作。

回答

3

这是一个虽然妥协:

  • 对于性能最好是有一个单一的ENTER_FRAME监听器。

  • 但对于维护应当最好有船舶类内部和游戏中的每个对象(例如,敌类,子弹类等)内单独的更新功能。

所以平时对付这一点,并获得最佳的两个选项的首选方法是对你的主类,它通常被称为主游戏循环一个主ENTER_FRAME监听器。这应该是游戏中唯一运行的ENTER_FRAME侦听器。在此游戏循环中,您应该为当前游戏中的每个对象调用一个更新函数,该函数负责更新游戏中对象的位置,状态等。

1

从我的意见 - 制作一个关卡引擎,用xml描述一个关卡,而不是为每个关卡创建一个关卡。 制作一个拍摄引擎,其中包含bulletes并更新tham。使碰撞发动机检查大小。 一个很好的例子就是废物侵入者的代码。 link 检查src/com/shooty /引擎代码,这对你有很大的帮助。

+0

非常有帮助,thanx – Vlad 2013-03-06 18:44:58