Actionscript 3 hittest无法作为3工作

Actionscript 3 hittest无法作为3工作,actionscript-3,hittest,Actionscript 3,Hittest,好的,我有个小问题。我有两个对象(每个对象中有两个按钮,不可见),第一个对象称为“crveno”,第二个对象称为“zeleno”。“zeleno”有称为“zlhit”的hittest区域,“crveno”有称为“chit”的hittest区域,两者都是按钮 我还有4个类似命中测试的对象,全部正常 这是zeleno和crveno的测试。我想zeleno回到它的起始位置,当它点击crveno.chit时,但它不起作用。它保持在当前位置,crveno转到起始位置。另一方面,crveno的hittest

好的,我有个小问题。我有两个对象(每个对象中有两个按钮,不可见),第一个对象称为“crveno”,第二个对象称为“zeleno”。“zeleno”有称为“zlhit”的hittest区域,“crveno”有称为“chit”的hittest区域,两者都是按钮

我还有4个类似命中测试的对象,全部正常

这是zeleno和crveno的测试。我想zeleno回到它的起始位置,当它点击crveno.chit时,但它不起作用。它保持在当前位置,crveno转到起始位置。另一方面,crveno的hittest有效。这是来自两个HitTest的代码

else if (zeleno.zlhit.hitTestObject(crveno.chit))
{
    crveno.x = crveno.x;
    crveno.y = crveno.y;
    zeleno.x = zelenoStartX;
    zeleno.y = zelenoStartY;

}


else if (crveno.chit.hitTestObject(zeleno.zlhit))
{
    zeleno.x = zeleno.x;
    zeleno.y = zeleno.y;
    crveno.x = crvenoStartX;
    crveno.y = crvenoStartY;
}

对于实际上相同的条件,您有两个不同的测试,即两个实例的命中区域相交。因此,当这两个实例的
hittest
返回true时,第一个
else if
条件将始终执行,并且您的代码将永远不会到达第二个
else if

在不了解更多有关您尝试执行的操作的信息的情况下,很难就如何解决问题提供建议,但是,如果您希望两个对象在相交时都返回到起始位置,可以将其组合到一个条件中:

// When crveno and zeleno hit, return both to their start positions
else if (zeleno.zlhit.hitTestObject(crveno.chit))
{
    crveno.x = crvenoStartX;
    crveno.y = crvenoStartY;
    zeleno.x = zelenoStartX;
    zeleno.y = zelenoStartY;

}

既然您提到crveno确实会改变位置,我假设包含按钮的对象会在对象位置改变时更新按钮的位置。如果不是这样,那么按钮不随其容器对象改变位置可能是问题所在

否则,似乎任何时候zlhit与chit重叠,我都希望相反的结果也是正确的。由于您的代码包含else if语句,因此只会触发第一个为true的条件。如果您的目标是当每个对象的按钮重叠时将其移回起始位置,则可以尝试以下操作:

if (zeleno.zlhit.hitTestObject(crveno.chit) &&
    crveno.chit.hitTestObject(zeleno.zlhit)) //this 2nd collision check is probably unnecessary
{
    crveno.x = crvenoStartX;
    crveno.y = crvenoStartY;
    zeleno.x = zelenoStartX;
    zeleno.y = zelenoStartY;
}

当crveno和zeleno的位置发生变化时,它们所包含的按钮的位置是否也发生了变化?是的,它们“固定”在对象上。我不确定是否有其他人指出了这一点,但类似于
crveno.x=crveno.x是多余的。是的,我知道,但是…没有它将无法工作…不知道为什么…好的,但是,它适用于任何其他对象(代码是相同的,或多或少)。你认为是其他原因造成了问题吗?按钮确实会改变位置,这是我检查的第一件事。根据您提供的代码,“else if”问题是我的最佳猜测。好的,谢谢。还有一个问题。“案例”能解决问题吗?我可以试试。这个很有效!!!只使用“IF”,如:IF(zeleno.zlhit.hitTestObject(crveno.chit)){zeleno.x=zelenoStartX;zeleno.y=zelenoStartY;}IF(crveno.chit.hitTestObject(zeleno.zlhit)){crveno.x=crvenoStartX;crveno.y=crvenoStartY;}这是相同的条件,只是表达方式不同(相反),因此,这两个条件现在都测试为真。您现在得到的代码实际上与我发布的代码相同,只是您有一个不必要的命中测试。