#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;’ в свой пакет.