Actionscript 3 动作脚本3的通用碰撞检测

Actionscript 3 动作脚本3的通用碰撞检测,actionscript-3,Actionscript 3,我在写一个游戏,你必须穿过迷宫。我希望这个游戏有不同的水平。但对于每一层来说,迷宫都是不同的。所以我画了其他的墙。但是如果我有50个不同的级别,我不想写50次碰撞检测方法 我想了一个方法来修复它,但它不起作用。我创建了一个没有任何内容的新符号,并将其命名为wall。我认为我可以使我的墙=墙1(我转换的另一个符号,并导出为as),只需执行stage.addChild(墙)。但是我找不到一个办法。所以我需要帮助 创建一个通用类,例如Wall,并使您的库符号将其用作基类。您不需要在运行时使用Actio

我在写一个游戏,你必须穿过迷宫。我希望这个游戏有不同的水平。但对于每一层来说,迷宫都是不同的。所以我画了其他的墙。但是如果我有50个不同的级别,我不想写50次碰撞检测方法


我想了一个方法来修复它,但它不起作用。我创建了一个没有任何内容的新符号,并将其命名为wall。我认为我可以使我的墙=墙1(我转换的另一个符号,并导出为as),只需执行stage.addChild(墙)。但是我找不到一个办法。所以我需要帮助

创建一个通用类,例如
Wall
,并使您的库符号将其用作基类。您不需要在运行时使用ActionScript创建它们,这样继承就可以工作了,您仍然可以将您的MovieClips放在舞台上

接下来你需要做的就是把这些墙放在某个地方。因为您似乎对ActionScript缺乏经验,并且希望避免为新级别编写代码,所以可以使用manager类型的类自动化此过程。我们将该类称为
WallManager
,它将如下所示:

public class WallManager
{
    private static var _walls:Vector.<Wall> = new <Wall>[];

    internal static function register(wall:Wall):void
    {
        _walls.push(wall);
    }

    public static function reset():void
    {
        _walls = new <Wall>[];
    }

    public static function get walls():Vector.<Wall>{ return _walls; }
}
for each(var i:Wall in WallManager.walls)
{
    var collision:Boolean = i.touchingMouse(mouseX, mouseY);

    if(collision)
    {
        // There was a collision.
        //
        //
    }
}
    private var wallnum:int;

public function Main()
{
   stop();
   wallnum = 1;
   var wallobj = new Wall();
   addChild(wallobj);
   wallobj.gotoAndStop(wallnum);
}
这种设置不是“最佳实践”,但它适合您的情况,因为您的项目看起来很小,您似乎在独自完成它,它很简单,并且可以完成任务

在每个标高的末尾,使用
WallManager.reset()
从上一标高移除墙。要检查所有墙之间的碰撞,只需使用如下循环:

public class WallManager
{
    private static var _walls:Vector.<Wall> = new <Wall>[];

    internal static function register(wall:Wall):void
    {
        _walls.push(wall);
    }

    public static function reset():void
    {
        _walls = new <Wall>[];
    }

    public static function get walls():Vector.<Wall>{ return _walls; }
}
for each(var i:Wall in WallManager.walls)
{
    var collision:Boolean = i.touchingMouse(mouseX, mouseY);

    if(collision)
    {
        // There was a collision.
        //
        //
    }
}
    private var wallnum:int;

public function Main()
{
   stop();
   wallnum = 1;
   var wallobj = new Wall();
   addChild(wallobj);
   wallobj.gotoAndStop(wallnum);
}

您可以制作一个50帧的MovieClip,在第一帧上说
stop()
,然后按如下方式编写代码:

public class WallManager
{
    private static var _walls:Vector.<Wall> = new <Wall>[];

    internal static function register(wall:Wall):void
    {
        _walls.push(wall);
    }

    public static function reset():void
    {
        _walls = new <Wall>[];
    }

    public static function get walls():Vector.<Wall>{ return _walls; }
}
for each(var i:Wall in WallManager.walls)
{
    var collision:Boolean = i.touchingMouse(mouseX, mouseY);

    if(collision)
    {
        // There was a collision.
        //
        //
    }
}
    private var wallnum:int;

public function Main()
{
   stop();
   wallnum = 1;
   var wallobj = new Wall();
   addChild(wallobj);
   wallobj.gotoAndStop(wallnum);
}
对于碰撞检测,我建议使用像素完美碰撞检测()