我正在做一个Flash CC的小游戏项目,我已经为一个玩家控制的角色做了一个移动地图。贴图( MovieClip)根据玩家(也是MovieClip)的移动方向进行置换。墙壁包围了透明的空间,由场景的颜色填充。
我想知道如何创建一个MovieClip边界,而不仅仅是将地图包围在一个矩形中,矩形既包围了墙壁,又包围了透明空间。基本上,我想要一个专门围绕实际图像本身的MovieClip边界。我不确定这是否在AS3或闪存本身是可行的。
如果我所描述的内容是不必要的/不可能的,我们也会非常感谢这个问题的任何变通方法。非常感谢!
发布于 2015-12-20 22:20:25
最简单的方法就是创建一个新的类,比如说Wall,它扩展了一个雪碧图(你不需要一个MovieClip )。
您甚至可以在Flash CC中创建该类,而不仅仅是在代码中。

注意3件事:
1)墙可以有透明填充,没有轮廓。我选择保留它们,这样你就可以在照片上看到了。
2)你需要勾选“为ActionScript导出”复选框并给它一个类名(我选择了"Wall“)
3)您可以选择将默认基类从MovieClip更改为Sprite。不会有太大的不同,但这是更好的。
然后继续将这些墙对象放置在地图上,无论是在MovieClip中还是位图中-这都无关紧要。只需将库中任意数量的拖放到舞台上即可。您也不需要为它们提供实例名称,除非您想要特定墙的特定控制(例如,当玩家拿起钥匙或其他东西时,它会自动删除)
在游戏脚本中,您可以在游戏开始时获得所有的墙,如下所示:
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
function getWallsInAHolder(holder:DisplayObjectContainer):Vector.<Wall>
{
var wallArray:Vector.<Wall> = new Vector.<Wall>();
var currentChild:DisplayObject;
for ( var i:int = 0; i < holder.numChildren; i++ )
{
currentChild = holder.getChildAt( i );
if ( currentChild is Wall )
wallArray.push( currentChild );
}
return wallArray;
}
trace(getWallsInAHolder(this).length );关于代码的几个重要注意事项:
1)为了不花太多时间,它是在一个框架中编写的。
2)你仍然可以在你的类中使用getWallsInAHolder()方法,它是完全独立的。
然后很容易使用AABB (或任何其他)碰撞检测来实际检查角色是否与任何墙发生碰撞。这甚至更好,因为你不必在每一面墙的位置(和大小)编程-只需在Flash中拖放它们!
https://stackoverflow.com/questions/34378297
复制相似问题