0

我正在尝试在 Flash CS4 中创建一个多层次的地牢冒险。布局是一个名为 Level 的符号创建的实例,符号内有多个墙子符号(墙),墙的实例。有一个从 Wall.As 调用的碰撞程序来阻止玩家穿过墙壁。水平是围绕中心点 (0,0) 绘制的。当我在 Level(关卡)的舞台上创建实例时,碰撞测试器使用的是绘制在 0,0 左右的墙壁的 xy 坐标,而不是它出现在舞台上的“真实”xy。所以我需要知道的是,如何使用现场舞台信息“更新”每个墙子符号的 xy,覆盖在父级中绘制的 XY。不幸的是,它必须更新(我不能让它保持静态),因为关卡很大,所以必须滚动。

谢谢你的建议。

4

3 回答 3

1

恕我直言,忘记你的方法,你白白地重新发明轮子,可能最终会变得更糟。您需要的是像素完美的碰撞检测,并且可能包括基本物理,所以我们已经在谈论大量的工作。如果您想以设计方式为游戏构建关卡,请使用它,它会让您大吃一惊,这是多么的棒/简单/酷:

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

于 2011-04-06T15:04:53.520 回答
0

我想你可以通过操纵墙壁符号的变换属性来完成你想要做的事情,但老实说,我会同意 Ascension Systems 并放弃你的碰撞测试程序以获得不同的东西。

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

于 2011-04-06T17:36:45.640 回答
0

当试图回答这样的问题时,它总是一个猜测,因为有很多未知数。话虽如此,在编程中,解决问题的方法总是不止几种。检查您的碰撞检测例程 - 如果您使用hitTestPoint以及使用localToGlobal测试的点(mouseX,Y 或您的主要角色),您可能不需要测试碰撞对象的 x,y 变量。阅读这两个主题,这个问题可能会变得毫无意义。

无论如何,您可以通过利用 globlaToLocal 来更新 Wall.as 实例中的相对坐标:

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

并从您的父类中检索它们,然后您可以对其进行测试:

trace(_wall.curLoc);

希望有帮助

于 2011-04-06T15:40:31.097 回答