actionscript-3 - 如何循环遍历帧号,如果为真则忽略该帧号?

标签 actionscript-3 random flash-cs6 flashdevelop

嘿伙计们,我正在努力寻找解决这种情况的最佳方法。

所以我的 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 并且该角色已经解​​锁,则重复随机帧编号,直到它落在锁定的角色上。我正在考虑设置一组数字,也许这种方法可能是合乎逻辑的,但不确定如何去做。

如有任何帮助,我们将不胜感激。

有关共享对象 bool 值的其他信息:

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;

最佳答案

如果角色已解锁,则递增变量。如果它过多(大于可解锁实体的数量),请将其设置为 1。如果它循环遍历所有角色并且它们都已解锁,请执行其他操作。您已经为此拥有了一个排序数组,它位于 sharedObjectCharacters.data 中,并且其索引是字符串,而不是 int。但这可以通过提供从 int 到 string 的映射并使用 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
}

关于actionscript-3 - 如何循环遍历帧号,如果为真则忽略该帧号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736709/

相关文章:

actionscript-3 - globals 或 'evil' singletons 有什么意义吗

actionscript-3 - 如何在 ActionScript 3.0 中更改屏幕背景颜色?

java - 随机字符和随机颜色生成器

actionscript-3 - AS3 Flash错误 “Cannot access a property or method of a null object reference”

actionscript-3 - E4X添加CDATA内容

actionscript-3 - AS3 : Rotation into Vector

c++ - 什么是 C++11 随机分布?

java - 基于单独的JAVA类随机化输出

actionscript-3 - Actionscript 3 - 检查互联网连接

actionscript-3 - 舞台上的对象不会在构造函数之外初始化