функции слушателя, созданные в addFrameScript, не действующие как замыкания? - PullRequest
0 голосов
/ 09 июня 2011

Для справки, вот вопрос, который я задал ранее сегодня относительно этого же проекта: Ссылочные объекты на сцене / фрейме из класса документа

addFrameScript, кажется, делает то, что мне нужно, за исключением одной вещи. В функции, которую я передаю для добавления в качестве фрейм-скрипта, я хочу динамически создать некоторые прослушиватели событий для кнопок, но переменные, которые я хочу закрыть поверх функций прослушивателя, ведут себя не так, как ожидалось - все они заканчиваются тем, что имеют последний назначенное значение переменной, а не значение, которое она имела при определении функции, как если бы действовали другие правила области видимости, чем обычно:

addFrameScript(node_frame - 1,
    function() {
        stop();
        question_txt.text = node_question;
        answers_xml = node_xml.answer;
        for (var i:Number = 0; i < answers_xml.length(); i++) {
            button = getChildByName('answer' + (i+1) + '_btn');
            if (answers_xml[i].attribute('node')) {
                goes_to = answers_xml[i].attribute('node');
                trace(goes_to); 
                button.addEventListener('click',
                    function() {
                        trace(goes_to);
                    });
            }
        }                   
    });

Сначала вывод трассировки:

1A
2A
3A

Но потом, если я нажму любую из трех кнопок, они все trace:

3A

У кого-нибудь есть понимание того, что здесь происходит и / или как я могу обойти это? Наблюдаются ли в фрейм-скриптах различную (динамическую, а не лексическую?) Область видимости или что-то в этом роде?

1 Ответ

2 голосов
/ 09 июня 2011

Нет, область видимости в добавленных фрейм-скриптах ведет себя точно так же, как и везде в AS3. Flash поздно связывает переменные, но вы пытаетесь получить к ним доступ, как если бы они были ранними в вашем слушателе.

Как ни странно, я только что ответил на этот же вопрос ранее сегодня здесь: Как связать переменную с функцией в as3

Для получения дополнительной информации я написал сообщение в блоге о подобных вещах здесь: http://www.scriptocalypse.com/?p=31

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