0

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

我有一个主要的英雄和发射子弹的船。我想添加两个级别,但我不确定如何正确构建它们或哪种方式正确。

我的主要课程可以容纳所有内容,并且应该切换低谷水平。所以我把每个级别作为一个单独的类。

示例代码

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
         }

    }
}

所以根据这段代码,我的问题是:我应该在 Ship 中使用单独的 ENTER_FRAME 函数添加飞船子弹,还是应该在关卡循环中添加它们?

我可以同时做这两种方式,但哪种方式更利于性能和维护,因为我计划在子弹到达场景尽头或击中英雄时添加一些动作。

4

2 回答 2

3

这是一个妥协:

  • 为了提高性能,最好有一个 ENTER_FRAME 侦听器。

  • 但为了维护,最好在 Ship 类和游戏中的每个对象(例如,Enemy 类、Bullet 类等)内有单独的更新函数。

所以通常处理这个问题并充分利用这两个选项的首选方法是在主类上设置一个主 ENTER_FRAME 侦听器,这通常称为Main Game Loop。这应该是游戏中运行的唯一 ENTER_FRAME 侦听器。从这个游戏循环中,您应该为游戏中当前的每个对象调用一个更新函数,该函数负责更新游戏中对象的位置、状态等。

于 2013-03-05T13:25:46.303 回答
1

在我看来 - 制作一个关卡引擎并用 xml 描述一个关卡,而不是为每个关卡创建一个类。制作一个装有子弹的射击引擎并更新它。进行碰撞引擎以检查碰撞。一个很好的例子是废物入侵者的代码。链接 检查 src / com / shooty / engine 代码,这将对您有很大帮助。

于 2013-03-05T13:21:33.407 回答