2011-04-06 102 views
0

我正试图在Flash CS4中创建多级地牢冒险。布局是创建一个名为Level的符号的实例,符号内有多个墙子符号(墙),墙的实例。有一个碰撞程序阻止玩家穿过墙壁,从Wall.As呼叫。 关于中心点(0,0)绘制等级。 当我在Level(level)的舞台上创建一个实例时,碰撞测试仪将使用xy坐标绘制大约0,0的墙,而不是在舞台上出现的“真实”xy坐标。 所以我需要知道的是,如何使用现场舞台信息“更新”每个墙体子标志的xy,覆盖在父级绘制的XY。它不得不被更新(我不能保持静态),因为水平很大,所以必须滚动。符号内的Flash CS4/AS3符号

感谢您的建议。

回答

1

在所有应有的尊重忘记你的方法,你重新发明轮子,可能会导致性能下降。你需要的是像素完美的碰撞检测,可能包括基础物理,所以我们已经在谈论大量的工作。试图回答的问题时,

http://www.gotoandlearn.com/play.php?id=135

+0

实际上使用bitmapData进行像素完美冲突并且点数更快,它在大多数PC上都不是很明显,但如果将Flash应用程序移植到移动设备上,您将看到差异。 – Saad 2011-04-06 21:05:43

+0

我不太确定我是否收到您的评论,我的回答是否意味着像素完美的基于位图的碰撞更慢?如果你只是在发表声明,我同意,bitmapdata类在flash中速度非常快。 – 2011-04-07 01:30:54

0

它总是一个猜测:如果你想建立一个设计方式级别游戏,利用这一点,它会打击你的心如何真棒/易/酷,这是像这样,因为有很多未知数。这就是说,在编程中,总是有不止几种方法来解决问题。检查你的碰撞检测例程 - 如果你使用hitTestPoint,以及正在测试的点(mouseX,Y或你的主要演员)localToGlobal,你可能不需要测试x,y变量你的碰撞物体。阅读这两个主题,这个问题可能会变得没有意义。

在任何情况下,你可以通过利用globlaToLocal更新您的Wall.as实例相对坐标:

public function get curLoc():Point 
{ 
    return globalToLocal(new Point(this.x, this.y)); 
} 

,并从父类检索它们作为一个点,你可以再试着:

trace(_wall.curLoc); 

希望有帮助

+0

做localToGlobal工作不管如何“深”的精灵(精灵obj是创建也许在另一个精灵对象是在舞台上? – Saad 2011-04-06 21:10:09

+0

@Saad我相信它,但localToGlobal和globalToLocal是挑剔的方法,必须在具体方式http://www.emanueleferonato.com/2010/06/22/understanding-as3-localtoglobal-method/。 – 2011-04-07 01:33:15

0

我想你可以通过操纵墙符号的transform属性来完成你想要做的事,但老实说,我会与Ascension Systems一致并放弃您的碰撞测试程序以寻找不同的东西。

您可能不需要为您的游戏全力以赴地使用物理引擎,在这种情况下只需使用hitTestObject来执行碰撞检测。