你可能會發現它不工作,因爲它特別難以對齊亞像素精度的對象。因此,您可能需要考慮「地板」或「四捨五入」您的號碼。我會建議地板,以避免它被四捨五入到下一個值。
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