Как объединить переменные в AS3 для flash

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Я пытаюсь создать функцию, которой в идеале вы указываете перейти на следующий уровень, и она сортирует все для перехода на следующий уровень за вас. В настоящее время я использую это, чтобы перейти с уровня 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.

Ответ №1:

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

 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 .

Комментарии:

1. Вам что-то в этом не нравится?

Ответ №2:

Я поддержал ваш ответ Kodiak, потому что он помог мне решить мою проблему после нескольких часов поиска правильного способа сделать именно это. Большое вам спасибо! Однако при использовании вашего кода я столкнулся с несколькими ошибками (по крайней мере, 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’, может быть, ‘как строка’ или что-то может быть лучше, если это вообще необходимо ??). Также это выдавало ошибку несоответствия между объектом и классом, поэтому мне также пришлось добавить ‘as Class’ в строку. Другим местом, которое вернуло некоторые ошибки, был просто ‘levelClass:Class’. Я обнаружил, что его вообще не нужно вводить, но опять же ‘:Class’ не понравился компилятору. Я полагаю, что это только для ввода переменных, как в ‘var levelClass:Class’, в противном случае вам придется вводить данные с помощью ‘levelClass как класс’ или ‘Class (levelClass)’. Я здесь новичок в программировании, поэтому есть большая вероятность, что я ошибаюсь, но в любом случае, это код, который мне пришлось использовать, чтобы заставить это работать. Также не забудьте ‘импортировать flash.utils.getDefinitionByName;’ в свой пакет.