2016-08-03 38 views
2

Hey Leute, ich kämpfe den besten Weg, um diese Situation anzugehen.Wie durchläuft man die Bildnummer und wenn wahr, dann ignoriere diese Bildnummer?

So habe ich 5 Bilder in meinem ovenScreen.mcChar Movieclip. Jeder ist ein Charakter, den der Spieler freischalten kann. Wenn der Spieler genug Münzen hat, kann er zum Gewinnbildschirm gehen, um einen zufälligen freischaltbaren Charakter zu erhalten.

Hier ist, wie es Setup weit ist so:

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); 


    } 

Wie man sehen kann ich die var frameLoop haben, die 1 eine Zufallszahl - 5. So ist der Charakter entsperrt zufällig sein und zeigen die Zufalls freigeschaltetes Zeichen Ich benutze die if-Anweisungen, um zu überprüfen, ob die Zufallszahl auf diesem bestimmten Frame landet und nicht, dass sie entsperrt ist, entsperre sie und speichere die Daten.

Jetzt funktioniert das alles gut, aber wie könnte ich gehen, um es zu beheben, wo, wenn das Element bereits entsperrt ist, durch eine andere Bildnummer zu sortieren. Wenn der frameLoop also auf 2 landet und das Zeichen bereits entsperrt ist, wiederholen Sie die Zufallsbildnummer, bis sie auf einem gesperrten Zeichen landet. Ich dachte daran, eine Reihe von Zahlen aufzustellen, vielleicht ist das ein logischer Ansatz, aber ich bin nicht sicher, wie ich das machen soll.

Jede Hilfe wäre dankbar, danke.

Zusätzliche Informationen über den gemeinsam genutzten Objekt Boolesche Werte:

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; 

    } 

und ich schaffe sie etwa so:

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

Antwort

2

Wenn das Zeichen bereits freigeschaltet ist, können Sie die Variable erhöhen. Wenn es über Bord ist (größer als die Anzahl der freischaltbaren Entitäten), setze es auf 1. Wenn es alle Zeichen durchlaufen hat und alle bereits entsperrt sind, tu etwas anderes. Und Sie haben bereits eine Reihe von Arten dafür, es ist nur in sharedObjectCharacters.data und seine Indizes sind Zeichenfolge, nicht int. Dies kann jedoch behoben werden, indem eine Zuordnung von int zu string bereitgestellt wird und die Syntax this[string] verwendet wird, um nach Eigenschaften zu suchen. Ein Beispiel:

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

Hey Vesper vielen Dank für diese und die Erklärung. Ich werde jetzt damit herumspielen und schauen, ob ich es zur Arbeit bringen kann. Ich werde Sie wissen lassen, ob ich irgendwelche Probleme habe, wenn das in Ordnung ist. Vielen Dank. Eine Frage so die StrUnlockables: Array halten meine SharedObject Booleans in ihnen korrekt? – Nathan

+0

Das Problem, das ich habe, ist, wenn ich die if-Anweisung spiele, wird nie berücksichtigt/Ich habe eine Spur in die if-Anweisung eingefügt und sie wird nie aufgerufen. Nicht sicher, was das Problem sein könnte. Die sharedHotDog, sharedTaco, etc ... sind alle boolesche Werte, die ich auf false gesetzt habe. irgendwelche Ideen, was könnte los sein? – Nathan

+0

'strUnlockables' enthält nur Strings, die * Namen * dieser booleschen Werte in Ihrem gemeinsamen Objekt. Bitte überprüfe, ob du beim Schreiben dieser Strings irgendwo einen Fehler gemacht hast (könnte ich). Als zweiten möglichen Grund ist die 'sharedObjectCharacters' in diesem Code nicht verfügbar. Bitte führen Sie 'trace (f, strUnlockables [f], sharedObjectCharacters.data [strUnlockables [f]])' vor der if-Anweisung aus, um zu prüfen, ob alle Daten während der Iteration erscheinen. – Vesper