在 ActionScript 3.0 中生成敌人

Posted

技术标签:

【中文标题】在 ActionScript 3.0 中生成敌人【英文标题】:Spawn Enemies in ActionScript 3.0 【发布时间】:2018-04-17 16:52:10 【问题描述】:

我脑子里出了点问题,在我的游戏中,我想在库中实例化敌人并将它们放到舞台上。所以我创建了一个 EnemySpawner 类,并将该类的一个实例放到舞台上。 (从库中拖放并给它一个实例名称)。所以这里是 EnemySpawner 类的代码:

package scripts 
import flash.display.MovieClip;

public class EnemySpawner extends MovieClip 

    var positions: Array = new Array(); // clockwise spawn positions
    var enemies : Array = new Array();
    var spwan:Boolean=false;
    public function EnemySpawner() 
        positions.push(MovieClip(root).rightPos);
        positions.push(MovieClip(root).leftPos);
        enemies.push("Enemy1");// here is the problem
    

    public function tick(): void 

    
    public function doSpwan():void

    


所以这里的问题是,我想从库中随机加载敌人并在舞台上实例化它们,设计环境是这样的:

在同一个类的库中有不同的敌人movieclips:

我不想为每个敌人分配一个新的 class ,例如我不想将 EnemyA Class 分配给 Enemy1 MovieClip Object ,将 EnemyB Class 分配给 Enemy2 MovieClip 。我希望库中的所有 Enemy MovieClip 共享同一个类 Enemy。所以但是使用这个,实例化是一项艰巨的任务,我不知道如何使用这种方法实例化敌人?

我知道我是否可以为每个敌人设置单独的课程:

var e1 : Enemy1 = new Enemy1();
var e2 : Enemy2 = new Enemy2();
...

var e3 : Enemy3 = new Enemy3();

但我想做这样的事情:

//Pseudocode:
//Instantiate form library (Name Of Enemy1); //base class is enemy 1
//Instantiate form library (Name Of Enemy1); //base class is enemy 1
//Instantiate form library (Name Of Enemy1); //base class is enemy 1

提前致谢。

【问题讨论】:

【参考方案1】:

实际上,这是一项简单的任务。为敌人分配不同的类,然后

// List classes in this Array.
var Enemies:Array = [Enemy1, Enemy2, Enemy3];

// Get a random class from the list.
var anIndex:int = Math.random() * Enemies.length;
var EnemyClass:Class = Enemies[anIndex];

// Spawn a random enemy.
// You can have a common superclass, or just use MovieClip or Sprite they are subclassed from.
var anEnemy:MovieClip = new EnemyClass;

【讨论】:

感谢您的代码,有没有办法不为敌人分配不同的类,我想要一个所有敌人的基类,如果您使用过 Unity3D,那么有一个单一的行为类,所有敌人只使用一个类,所以它们的逻辑都是一样的。 @S.A.Parkhid 有不同的方法,但是为图书馆项目分配独特的类是不可避免的,这样或那样。 " 但是为库项目分配唯一的类是不可避免的" ,关于动作脚本不是有趣的问题,但我接受你的回答,谢谢老兄! 我已经制作了所有的 Enemy1 , Enemy 2, Enemy 3 来扩展我自己的 Enemy 类。这让我只更新 Enemy 类,因为继承,问题解决更简单,但为库项目分配唯一类是不可避免的。 @S.A.Parkhid 是的。其中一种方法是创建一个基础敌人类别,然后子类别是您在那里拥有的不同敌人变体的数量的倍数。您可以编写一个静态 BaseEnemy.create() 方法,该方法实例化并返回一个可用的子类。

以上是关于在 ActionScript 3.0 中生成敌人的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 在AS3中生成网格

ActionScript 3 在AS3中生成TV静态

想要在 Actionscript 2.0 Flash 中生成多个影片剪辑实例

在javascript中的画布中生成随机图像

[ActionScript 3.0] AS3.0 水面波纹效果

[ActionScript 3.0] AS3.0根据当天日期获取明天,后天...日期