Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash Actionscript 3.0对象位置比较_Flash_Actionscript 3_Position - Fatal编程技术网

Flash Actionscript 3.0对象位置比较

Flash Actionscript 3.0对象位置比较,flash,actionscript-3,position,Flash,Actionscript 3,Position,正如你可能已经从我以前的帖子中看到的,我正在Flash/Actionscript 3.0中创建一个侧面滚动动作游戏 现在我正试图让敌人的物体朝向玩家的方向。我的意思是dartD1是敌人角色对象的一个实例。如果它的scaleX为1,则它面向右侧;如果其scaleX为-1,则它面向左侧: if (dartD1.x < player.x) { dartD1.scaleX = 1; } else if (dartD1.x > player.x) {

正如你可能已经从我以前的帖子中看到的,我正在Flash/Actionscript 3.0中创建一个侧面滚动动作游戏

现在我正试图让敌人的物体朝向玩家的方向。我的意思是dartD1是敌人角色对象的一个实例。如果它的scaleX为1,则它面向右侧;如果其scaleX为-1,则它面向左侧:

    if (dartD1.x < player.x) {
        dartD1.scaleX = 1;
    } else if (dartD1.x > player.x) {
        dartD1.scaleX = -1;
    }
我的问题是如何在敌人和玩家之间进行位置比较?要做到这一点,我显然需要得到玩家相对于dartD1的位置。我尝试过这样做:

        if (dartD1.x < player.localToGlobal(new Point()).x) {
        dartD1.scaleX = 1;
    } else if (dartD1.x > player.localToGlobal(new Point()).x) {
        dartD1.scaleX = -1;
    }
这不起作用,因为player.localToGlobalnew Point.x仍然返回350,player.globalToLocalnew Point.x也是如此

我在互联网上寻找解决方案,但没有得到任何帮助。任何帮助都将不胜感激

谢谢,
如果我不理解的话,请原谅我……但是……如果你的球员总是在屏幕中间,你能不能检查一下在舞台上的敌人在他/她的两边?

因此,您的代码

if (dartD1.x < player.x) {
    dartD1.scaleX = 1;
} else if (dartD1.x > player.x) {
    dartD1.scaleX = -1;
}
…应该真的管用。您只需要将其作为事件处理程序的一部分进行调用,我假设它是在帧事件或计时器上运行的

这不是最可靠的解决方案,但会奏效

编辑:

试试这个

var pt:Point = dartD1.localToGlobal(new Point(dartD1.x, dartD1.y));

if (pt.x < player.x) {
    dartD1.scaleX = 1;
} else if (pt.x > player.x) {
    dartD1.scaleX = -1;
}

你应该在世界X和Y中分别跟踪对象与屏幕X和Y上的对象。这样你就可以轻松地处理屏幕外的对象,对象之间的交互也会更加健壮

一个对象的screenX是它的worldX减去屏幕的scrollX,Y也是一样。因此,如果相机滚动至50,50,且对象位于110120,则其屏幕位置将为60,70


一旦你的游戏做到了这一点,无论物体在屏幕上或屏幕外的位置如何,世界位置之间的任何比较都应该起作用。

Hi@午餐317,当我打印出玩家的“x”位置时,它总是等于350——舞台的中心。我很想让我的原始代码工作——健壮与否。我通过帧事件调用此代码。我使用一个EventHandler,然后调用上面的代码。我刚刚尝试将代码放入处理程序中,但这并不能解决问题。不知何故,坐标比较只在程序启动时发生一次。我认为这是因为我确实看到一个敌人朝着另一个方向,但那是因为它被初始化为玩家的右侧。@ChristianBasar,那个敌人到底在移动吗?或者,一个更好的问题-您是否正在更新敌人实例的x/y?此外……它是舞台上的孩子,还是其他物体的孩子?目前,敌人根本不动;它们的x,y坐标不变。他们是名为DartDenizenCainer的MovieClip容器的子容器。然后将DartDenizenCainer添加到envContainer,然后将envContainer添加到stage或this。在我发布的代码中,我试图只改变一个敌人的方向。但在过去,我试着穿过整个dartDenizenContainer,参考并改变其中每一个敌人目标的方向。“这也不起作用。”克里斯蒂安·巴萨尔(ChristianBasar)见编辑。您可能需要将局部坐标空间转换为全局坐标空间,并从中进行检查。看起来您以前尝试过类似的操作,但我不确定它是否完全正确。我尝试按照您的建议创建点,但我只得到两个错误:将Number类型的值隐式强制为不相关的类型。flash.geom:Point和不正确的参数数。预计不超过1。该提示有意义。然而,我在获取球员的worldX时遇到了问题。我在玩家和敌人身上都尝试过使用localToGlobal,但我只得到了错误:将Number类型的值隐式强制为不相关的类型。flash.geom:Point和不正确的参数数。预计不超过1。我预计您必须自己制定/实施worldX和worldY或worldPoint定义-舞台只知道自己的规模,而不是全球/世界规模。另外:隐式强制错误听起来像是您试图指定一个x或y值,这两个值都是作为点的数字,这是一个问题,因为一个点中同时包含x和y值。
var pt:Point = dartD1.localToGlobal(new Point(dartD1.x, dartD1.y));

if (pt.x < player.x) {
    dartD1.scaleX = 1;
} else if (pt.x > player.x) {
    dartD1.scaleX = -1;
}