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

时间:2013-06-10 21:26:33

标签: actionscript-3

我正在写一个你必须经历迷宫的游戏。我希望这个游戏有不同的水平。但对于每个级别,迷宫将会有所不同。所以我画了其他墙。但如果我有50个不同的等级,我不想写我的碰撞检测方法50次。

我想到了修复它的方法,但它没有用。我创建了一个没有任何内容的新符号,并将其命名为wall。我想我可以让我的墙= wall1(我转换的另一个符号,并导出为),然后只做stage.addChild(墙)。但我找不到办法做到这一点。所以我需要帮助!

2 个答案:

答案 0 :(得分:0)

制作一个通用类,例如Wall并使您的库符号将其用于其基类。您不需要在运行时使用ActionScript创建它们以使此继承有效,您仍然可以将MovieClip放在舞台上。

接下来你要做的就是将这些墙存放在某个地方。由于您似乎对ActionScript缺乏经验,并且希望避免为新级别编写代码,因此可以使用管理器类型类自动执行此过程。我们将此类称为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; }
}

然后我们将创建您的Wall课程。在此类的构造函数中,我们将自动将Wall添加到WallManager列表中:

public class Wall extends Sprite
{
    public function Wall()
    {
        WallManager.register(this);
    }

    public function touchingMouse(mouseX:int, mouseY:int):Boolean
    {
        // For this example I am checking for collisions with the
        // mouse pointer. Replace this function with your own collision
        // logic for whatever it is that is supposed to collide with
        // these walls.

        if(parent === null) return false;

        var bounds:Rectangle = getBounds(parent);
        return bounds.contains(mouseX, mouseY);
    }
}

此设置不是最佳做法,但它适用于您的情况,因为您的项目看起来很小,您似乎只是单独工作,它很简单,它可以得到工作完成。

在每个级别结束时,使用WallManager.reset()删除上一级别的墙。要检查所有墙壁的碰撞,只需使用如下的循环:

for each(var i:Wall in WallManager.walls)
{
    var collision:Boolean = i.touchingMouse(mouseX, mouseY);

    if(collision)
    {
        // There was a collision.
        //
        //
    }
}

答案 1 :(得分:0)

您可以制作一个包含50帧的MovieClip,在第一帧上显示stop()并执行以下代码:

    private var wallnum:int;

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

对于碰撞检测,我建议使用Pixel Perfect Collision Detection(https://code.google.com/p/master-air-controller/source/browse/trunk/master-air-controller/src/PixelPerfectCollisionDetection.as?spec=svn6&r=6