Как объединить переменные в AS3 для flash - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь создать функцию, которая в идеале говорит вам перейти на следующий уровень, и она разберется во всем для перехода на следующий уровень для вас.В настоящее время я использую это, чтобы перейти с уровня 1 на 2 ...

level1.GoButton.addEventListener(MouseEvent.CLICK, myClick);

function myClick(eventObject:MouseEvent) {

    if (levelText == "Password"){
        //mc level transition
        removeChild(level1);
        var level2 = new level_2();
        addChild(level2);
        //bring effects to top
        setChildIndex(screen_FX, numChildren - 1);
        //bring border to top
        setChildIndex(Border, numChildren - 1);
        //diable layer mask mouse
        level2.masking.mouseEnabled = false;
        //play mc and transition effects
        level2.gotoAndPlay(1);

        } else {

            wrong.play(0, 1);

        }
}

Я думал, можно ли как-нибудь передать в функцию переменную, которая может объединять имена переменных, например

    removeChild(level[i]);
    var level[i+1] = new level_[i+1}();
    addChild(level[i+1});

Также мне нужно сделать так, чтобы он проверял, является ли levelText == любым нажатием клавиши Enter, а также щелчком мыши по кнопке GoButton.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вот правильный способ сделать это:

removeChild(getChildByName("level" + i.toString()));
var levelClassName:String = "level_" + (i+1).toString();
var levelClass:Class = getDefinitionByName(levelClassName);
var level:DisplayObject = new levelClass();
level.name = "level" + (i+1).toString();
addChild(level);

Вам не нужно менять имя переменной, поскольку оно локальное и не будет существовать при следующем выполнении myClick.

0 голосов
/ 27 августа 2011

Я проголосовал за ваш ответ Кадьяку, потому что он помог мне решить мою проблему после нескольких часов поиска правильного способа сделать именно это.Спасибо вам большое!Тем не менее, при использовании вашего кода я столкнулся с несколькими ошибками (по крайней мере, Flash CS5 не понравилась пара вещей, которые вы сделали).Так что, если кто-то еще сталкивался с этим, вот что я должен был сделать, чтобы заставить это работать во Flash.

    removeChild(getChildByName("level" + i.toString()));
    var levelClassName:String = "level_" + (i+1).toString();
    var levelClass:Class = getDefinitionByName(levelClassName) as Class;
    var level:DisplayObject = new levelClass;
    level.name = "level" + (i+1).toString();
    addChild(level);

Разница на самом деле только в некотором синтаксисе, но она вызвала ошибки.В частности, getDefinitionByName не нужно было перепечатывать как строку (и не может быть так, как кажется через ': String' может быть 'как строка' или что-то может быть лучше, если это даже нужно ??).Также это дало ошибку несоответствия между объектом и классом, поэтому мне пришлось добавить «как класс» в строку.Другое место, которое отбросило некоторые ошибки, было просто 'levelClass: Class'.Я обнаружил, что его вообще не нужно печатать, но опять-таки ': Class' не понравился компилятору.Я считаю, что это только для ввода переменных, как в 'var levelClass: Class', в противном случае вы должны набирать вещи с помощью 'levelClass as Class' или 'Class (levelClass)'.Я - нуб-программист, так что есть большая вероятность, что я ошибаюсь, но в любом случае это код, который мне пришлось использовать, чтобы заставить это работать.Также не забудьте «импортировать flash.utils.getDefinitionByName;»в вашу посылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...