2016-08-03 3 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); 


    } 

あなたは私が1から乱数であるVAR frameLoopを持って見ることができるように - 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

こんにちはベスパーは、これと説明のために大変ありがとうございます。私はそれを今遊んで、私がそれを働かせることができるかどうか見ていきます。あなたが知っていれば私は問題に遭遇すればそれは大丈夫です。ありがとう。 1つの質問strUnlockables:Arrayは私のsharedObjectブーリアンを正しい位置に保持していますか? – Nathan

+0

私が抱えている問題は、if文が決して考慮されていない/ if文の中にトレースを追加しても呼び出されないということです。何が問題なのかわからないsharedHotDog、sharedTacoなどはすべて私がfalseに設定したブール値です。何が起こっているのでしょうか? – Nathan

+0

'strUnlockables'は共有オブジェクト内のブール値の文字列、*名前*だけを保持します。あなたがどこでもそれらの文字列を書くことに間違いをしなかったかどうか確認してください。 2つ目の理由として、 'sharedObjectCharacters'はこのコードではアクセスできません。 if文の直前で 'trace(f、strUnlockables [f]、sharedObjectCharacters.data [strUnlockables [f]])'を実行して、反復処理中にすべてのデータが表示されているかどうかを確認してください。 – Vesper

関連する問題