2016-08-03 18 views
2

嘿傢伙,所以我正在努力解決這種情況的最佳方式。如何遍歷幀編號,如果爲true,則忽略該幀編號?

所以我有我的ovenScreen.mcChar影片剪輯5幀。每個角色都是玩家可以解鎖的角色。如果玩家有足夠的金幣,那麼他們可以進入獎品屏幕以獲得隨機解鎖角色。

這裏是它是如何建立至今:

private function getPrizeHandler(e:MouseEvent):void 
    { 
     //Check if prize is locked or unlocked then unlock item/ loop through random number frames 
     frameLoop = randomNumber(1, 5); 

     ovenScreen.mcChar.gotoAndStop(frameLoop); 


     if (frameLoop == 1 && !sharedObjectCharacters.data.sharedHotDog) 
     { 
      sharedHotDog = true; 
      sharedObjectCharacters.data.sharedHotDog = sharedHotDog; 
      sharedObjectCharacters.flush(); 
     }else 
     if (frameLoop == 2 && !sharedObjectCharacters.data.sharedTaco) 
     { 
      sharedTaco = true; 
      sharedObjectCharacters.data.sharedTaco = sharedTaco; 
      sharedObjectCharacters.flush(); 
     }else 
     if (frameLoop == 3 && !sharedObjectCharacters.data.sharedDonut) 
     { 
      sharedDonut = true; 
      sharedObjectCharacters.data.sharedDonut = sharedDonut; 
      sharedObjectCharacters.flush(); 
     }else 
     if (frameLoop == 4 && !sharedObjectCharacters.data.sharedCoffee) 
     { 
      sharedCoffee = true; 
      sharedObjectCharacters.data.sharedCoffee = sharedCoffee; 
      sharedObjectCharacters.flush(); 
     }else 
     if (frameLoop == 5 && !sharedObjectCharacters.data.sharedPancakes) 
     { 
      sharedPancakes = true; 
      sharedObjectCharacters.data.sharedPancakes = sharedPancakes; 
      sharedObjectCharacters.flush(); 
     } 

     //////////////////////////////////////// 
     ovenScreen.gotoAndPlay(2); //play animations 
     TweenLite.delayedCall(3.5, prizeConfettie); 
     ovenScreen.removeEventListener(MouseEvent.CLICK, getPrizeHandler); 


    } 

正如你可以看到我有VAR frameLoop這是從1隨機數 - 5。所以解鎖的角色將是隨機的,並顯示隨機解鎖角色。我使用if語句來檢查隨機數是否落在特定的框架上,而不是解鎖後解鎖並保存數據。

現在,這一切工作正常,但我怎麼能解決它的地方,如果項目已解鎖,通過不同的幀號進行排序。所以如果frameLoop登陸到2並且那個角色已經被解鎖,那麼重複隨機幀號直到它登陸一個鎖定的角色。我正在考慮設置一組數字,也許這種方法可能是合乎邏輯的,但不知道如何去做。

任何幫助,將不勝感激謝謝。

附加信息上的共享對象布爾:

private function allSharedObjectBooleans():void 
    { 

     sharedObjectCharacters = SharedObject.getLocal("Characters"); 

     sharedHotDog = sharedObjectCharacters.data.sharedHotDog != null ? sharedObjectCharacters.data.sharedHotDog : false; 
     sharedTaco = sharedObjectCharacters.data.sharedTaco != null ? sharedObjectCharacters.data.sharedTaco : false; 
     sharedDonut = sharedObjectCharacters.data.sharedDonut != null ? sharedObjectCharacters.data.sharedDonut : false; 
     sharedCoffee = sharedObjectCharacters.data.sharedCoffee != null ? sharedObjectCharacters.data.sharedCoffee : false; 
     sharedPancakes = sharedObjectCharacters.data.sharedPancakes != null ? sharedObjectCharacters.data.sharedPancakes : false; 

    } 

和我創建它們像這樣:

//shared Booleans 
    private var sharedHotDog:Boolean; 
    private var sharedTaco:Boolean; 
    private var sharedDonut:Boolean; 
    private var sharedCoffee:Boolean; 
    private var sharedPancakes:Boolean; 

回答

2

如果角色已經解​​鎖,你增加變量。如果它過度(大於可解鎖實體的數量),則將其設置爲1.如果它遍歷所有字符並且它們都已解鎖,請執行其他操作。而且你已經有了一系列排序,它只是位於sharedObjectCharacters.data,它的索引是字符串,而不是int。但是這可以通過提供一個int到字符串的映射來解決,並使用this[string]語法來檢查屬性。舉個例子:

const strUnlockables:Array=["Noone","sharedHotDog","sharedTaco","sharedDonut","sharedCoffee","sharedPancakes"]; 
const unlockables:int=5; 
private function getPrizeHandler(e:MouseEvent):void { 
    var f:int=randomNumber(1,5); //frameLoop 
    for (var i:int=0;i<unlockables;i++) { // check all unlockables, starting with f'th 
     if (sharedObjectCharacters.data[strUnlockables[f]]===false) { 
      // this "f" is the one to unlock 
      sharedObjectCharacters.data[strUnlockables[f]]=true; 
      sharedObjectCharacters.flush(); 
      ovenScreen.mcChar.gotoAndStop(f); 
      ovenScreen.gotoAndPlay(2); //play animations 
      TweenLite.delayedCall(3.5, prizeConfettie); 
      break; 
     } 
     f++; 
     if (f>unlockables) f=1; // loop around 
    } 
    // if we're here, we either did a break, or have all characters unlocked 
    ovenScreen.removeEventListener(MouseEvent.CLICK, getPrizeHandler); // clean up 
} 
+0

餵過Vesper非常感謝你爲這個和解釋。我現在要玩弄它,看看我能否實現它。我讓你知道如果我遇到任何問題,如果那沒關係。謝謝。一個問題,所以strUnlockables:數組是否持有我的sharedObject布爾值正確? – Nathan

+0

我遇到的問題是當我播放if語句時,從來沒有考慮/我在if語句中添加了一個跟蹤,並且它永遠不會被調用。不知道可能是什麼問題。 sharedHotDog,sharedTaco等......都是我設置爲false的布爾值。任何想法可能會發生什麼? – Nathan

+0

'strUnlockables'只包含字符串,共享對象中的布爾值的*名稱*。請檢查你是否在任何地方寫入字符串時犯了錯誤(我可以)。作爲第二個可能的原因,這個代碼中不能訪問'sharedObjectCharacters'。請在if語句之前執行trace(f,strUnlockables [f],sharedObjectCharacters.data [strUnlockables [f]])來檢查所有數據是否在迭代時出現。 – Vesper