2015-04-01 103 views
0

這是一個拼圖般的益智遊戲。我希望它能在所有作品到位後直接進入下一個場景。因此,在每個「地圖片」旁邊都會顯示它在適當位置的座標。if語句的多個條件? (代碼不起作用)

但是//出乎意料的驚喜//它不起作用:c甚至有可能把這麼多條件放在第一位?

謝謝您的閱讀C:(justABeginner)

if (map1.x== 259.45 && 
map1.y== 77.05 && 

map2.x== 368.3 && 
map2.y== 69.45 && 

map3.x== 445.30 && 
map3.y== 90.4 && 

map4.x== 288.5 && 
map4.y== 207.15 && 

map5.x== 325.75 && 
map5.y== 164.65 && 

map6.x== 436.20 && 
map6.y== 187.65) 

{ 
gotoAndStop (1, "Scene 3"); 
} 
+0

是的,你可以儘可能多的條件,只要你喜歡。但正如akmozo所說,這種情況非常具體。當map1的x值爲259.44時會發生什麼?確切地說,沒有。 – DodgerThud 2015-04-01 05:58:25

+0

從技術上講,你的'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

+0

您也可以創建一個方法來驗證所有這些條件(如果需要,還可以更多)並返回true或false。所以,你的if語句將會清晰易讀。例如:if(verifyMapPositions()){gotoAndStop(1,「Scene3」); }。所以,在這個函數中,你可以添加和評論什麼是必要的,並且容易理解是什麼導致返回'false'並修復它。 – gabriel 2015-04-01 06:10:40

回答

0

代碼看起來沒什麼問題。如果條件不能評估爲真,那麼它實際上可能是不同的值。在printf之類的If語句之前進行一個簡單的調試步驟來檢查這些值是否完全相同。

有時,精度將在這種If語句中發揮重要作用。

編碼愉快:)

+0

很好的建議,但AS3/Flash不使用'printf'。它使用一個名爲「trace(...)」的函數 – DodgerThud 2015-04-01 06:02:53

0

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

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; 
} 
0

作爲建議的一般一塊,你永遠不應該有使用相等性檢查(= =)浮點數。在某些時候,你會發現你不能相信0.5 + 0.2會等於0.7。它可能最終等於0.70000000001或0.6999999999999

正如其他人所提到的,嘗試四捨五入你的數字,或者更好的辦法是嘗試一個小範圍,在這個小範圍內,這個小塊被捕捉到位,比如說加或減10個像素?