AS3 подсчитывает количество flashVars перед вводом оператора if - PullRequest
1 голос
/ 12 июля 2011

Я создаю простой просмотрщик изображений с использованием AS3 и получаю URL-адреса изображений из flashVars в HTML.Я хочу использовать аргумент if

, чтобы он выполнял одну функцию, если есть только один flashVar, и другой, если их больше.весь день у меня проблема с подсчетом числа

flashVars, передаваемых из HTML.вот настоящая тупая версия того, что я пытаюсь сделать (которая не работает

, потому что я не могу понять правильный процесс, которому нужно следовать):

var numberOfVars:Number = 0; // to store the number of flashVars
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; //get the flashVars

for each (paramObj in LoaderInfo(this.root.loaderInfo).parameters){
    numberOfVars + 1;
}

var tf:TextField = new TextField();
addChild(tf);
tf.text = numberOfVars.toString(); // this returns '0' when runningn this code


if (numberOfVars < 2){
    //do this
}

else {
    //do this
}

спасибо за вашу помощьребята.

Крис

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

Вы хотели бы увеличить numberOfVars

Похоже, у вас есть это:

 numberOfVars + 1;

Когда вам нужно это:

 numberOfVars++;

это просто короткий способ написать это:

 numberOfVars = numberOfVars + 1;

или это:

 numberOfVars += 1;
1 голос
/ 12 июля 2011

Просто используйте цикл for(key in object) для отслеживания количества переменных, хранящихся в root.loaderInfo.parameters.

var fvars:Object = root.loaderInfo.parameters;

var n:int = 0;
for(var i:String in fvars) n ++;

// n holds the amount of flashvars
if(n <= 1)
{
    // one or no variables found
}
else
{
    // more than one found
}

Кроме того, вы ошиблись одним из своих операторов:

for each(paramObj in LoaderInfo(this.root.loaderInfo).parameters)
{
    numberOfVars + 1; // <<<<<< here
}

Вы ищете одно из следующего:

numberOfVars ++;
numberOfVars += 1;
numberOfVars = numberOfVars + 1;
1 голос
/ 12 июля 2011

Я предложу немного другой подход к условной логике. Вместо того, чтобы реагировать на переменные в зависимости от их количества (предоставляя множество возможностей для непредсказуемых результатов), - почему бы не основывать свои условные утверждения на том, что переменные на самом деле . Это мой стандартный процесс flashVar:

var _loadParams:Object
private function init():void 
    {
        _loadParams = new Object();
        _loadParams = LoaderInfo(stage.loaderInfo).parameters;

        someVar     = String(   parseParam( "someVar", "default value") );
    }

    private function parseParam(name:String, defaultValue:String):String
    {
        if (_loadParams.hasOwnProperty(name) && _loadParams[name] != "" && _loadParams[name] != "undefined") 
        {
            return _loadParams[name];
        }
        else
        {   
            return defaultValue;
        }
    }

Это, очевидно, всего лишь проверка на наличие значения, но его можно легко изменить, вызвав некоторую функциональность на основе этих результатов:

if (_loadParams.hasOwnProperty(name) && _loadParams[name] != "" && _loadParams[name] != "undefined") 
{               
    switch (name){
        case 'param1':
            doSomthing(name);
            break;
        case 'param2':
            doSomthingElse(name);
            break;
    }
}

Я не знаю, чего вы пытаетесь достичь, и это может быть далеко. Но я думал, что я буду вмешиваться;)

Ура!

...