你可能会发现它不工作,因为它特别难以对齐亚像素精度的对象。因此,您可能需要考虑“地板”或“四舍五入”您的号码。我会建议地板,以避免它被四舍五入到下一个值。
if (Math.floor(map1.x) == 259 && Math.floor(map1.y) == 77 &&
Math.floor(map2.x) == 368 && Math.floor(map2.y) == 69 &&
Math.floor(map3.x) == 445 && Math.floor(map3.y) == 90 &&
Math.floor(map4.x) == 288 && Math.floor(map4.y) == 207 &&
Math.floor(map5.x) == 325 && Math.floor(map5.y) == 164 &&
Math.floor(map6.x) == 436 && Math.floor(map6.y) == 187)
{
gotoAndStop (1, "Scene 3");
}
做这样的事情会给你一个更“模糊”的比较,应该更容易排列拼图块。此外,你可能要考虑可能是通过增加一个帮助用户“捕捉到的地点”功能...
function inrange(targetX, targetY, mapX, mapY, strength) {
targetX -= (strength/2);
targetY -= (strength/2);
return (mapX >= targetX && mapX <= (targetX+strength) &&
mapY >= targetY && mapY <= (targetY+strength));
}
//snap map piece into place if within 3 pixels
if (inrange(259, 77, map1.x, map1.y, 3)) {
map1.x = 259;
map1.y = 77;
}
是的,你可以尽可能多的条件,只要你喜欢。但正如akmozo所说,这种情况非常具体。当map1的x值为259.44时会发生什么?确切地说,没有。 – DodgerThud 2015-04-01 05:58:25
从技术上讲,你的'if'很好,但是你使用了很多非常精确的值,所以我不确定你会得到它的工作!相反,你可以尝试使用['hitTestObject()'](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestObject%28%29)和/或['hitArea()'](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html#hitArea)。 – akmozo 2015-04-01 06:01:17
您也可以创建一个方法来验证所有这些条件(如果需要,还可以更多)并返回true或false。所以,你的if语句将会清晰易读。例如:if(verifyMapPositions()){gotoAndStop(1,“Scene3”); }。所以,在这个函数中,你可以添加和评论什么是必要的,并且容易理解是什么导致返回'false'并修复它。 – gabriel 2015-04-01 06:10:40