好的,我有点问题。我有两个对象(每个对象中有两个按钮,它们是不可见的),第一个对象叫做“crveno”,第二个叫“zeleno”。 “zeleno”有一个叫做“zlhit”的最热门区域,而“crveno”有一个叫做“chit”的最热门区域,都是按钮。
我还有4个具有类似命中测试的对象,都可以正常工作。
这对zeleno和crveno来说是最热门的。我想zeleno回到它的起始位置,当它击中crveno.chit,但它不起作用。它保持在当前的位置,并且crveno开始了位置。另一方面,crveno的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;
}
答案 0 :(得分:1)
对于实际上相同的条件,你有两个不同的测试即。两个实例的命中区域相交。因此,当else if
为这两个实例返回true时,第一个hittest
条件将始终执行,并且您的代码永远不会达到第二个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;
}
答案 1 :(得分:0)
既然你提到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;
}