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