Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   гейзенбаг при вызове из FD функции из swc (http://www.flasher.ru/forum/showthread.php?t=210915)

undefined 26.05.2015 18:44

гейзенбаг при вызове из FD функции из swc
 
1)Уже довольно давно преследует непонятная бага/фича:
В текущем проекте для кнопок использую такой шаблон - однокадровый MovieClip,в котором лежит dynamic TextField и прозрачный спрайт bg поверх.Также в кадре описана функция
Код AS3:

function update():void {
        tf.x=tf.y=5;
        bg.width=tf.x+tf.width+15;
        bg.height=tf.y+tf.height+10;
}

Которая подгоняет bg под размеры тектфилда
Все это дело компилится в SWC и включается в FD проект.Но вот какая странная штука раз в 10-20 сборок, там где вызывается эта функция, выскакивает
Цитата:

update is not a function
Причем если пересобрать флэшку ошибка исчезает

2)И второй вопрос который как-то может быть связан с первым.Заметил такую особенность если в flash IDE Создать MovieClip, прописать у него в первом кадре такой код:
Код AS3:

var a:Number=0;
function test():void {
        trace(a);
}

Кинуть его на сцену с именем mc и в первом кадре сцены вызвать
Код AS3:

mc.test();

в консоле появится NaN. Т.е. переменная создалась, но не проинициализировалась.Фактическая инициализация происходит только в следующем кадре.Есть у этого какое-то логическое объяснение?

illuzor 26.05.2015 19:00

А что, если убрать весь код из кадров и перенести в классы?

undefined 26.05.2015 19:02

а вот не хотелось бы такой шелухой основной код захламлять

caseyryan 26.05.2015 19:34

Вопрос в догонку. У тебя там случаем не TLFTextField используется?
С ним такие баги наблюдались всегда

undefined 26.05.2015 19:43

Не обычный classic TextField. От TLF стараюсь держаться подальше уж больно монструозны)

in4core 26.05.2015 21:16

Цитата:

в консоле появится NaN. Т.е. переменная создалась, но не проинициализировалась.Фактическая инициализация происходит только в следующем кадре.Есть у этого какое-то логическое объяснение?
Че то знакомое связанное с прелоадингом, что инициалищзация идет во втором кадре, помоему даже в настройках компила выставляется грузить все в 1й или нет.... Хотя могу ошибаться

undefined 26.05.2015 21:34

Цитата:

помоему даже в настройках компила выставляется грузить все в 1й или нет
Самое близкое что нашел - это в свойствах мувиклипа export in 1 frame,но никакого влияния на ситуацию чекбокс не имеет

callme 26.05.2015 21:40

Код AS3:

public dynamic class MainTimeline extends MovieClip
{
        public var mc:MovieClip;
 
        public function MainTimeline()
        {
                addFrameScript(0, this.frame1);
        }
 
        function frame1():*
        {
                mc.test();
        }
}

Код AS3:

public dynamic class MC extends MovieClip
{
        public var a:Number;
 
        public function MC()
        {
                addFrameScript(0, this.frame1);
        }
 
        public function test():void
        {
                trace(this.a);
        }
 
        function frame1():*
        {
                a = 0;
        }
}


dimarik 26.05.2015 21:47

А вывод какой, бро? Ты бы немного нам, темным, поведал бы в чем там фишка.

callme 26.05.2015 21:52

Выполняется frame1 Мэйнтаймлайна, в котором вызывается mc.test. И только потом выполняется frame1 Клипа, в котором "а" перестанет быть NaN.

Или у вас вопрос почему флеш создает такой код на выходе. Это я не знаю.


Часовой пояс GMT +4, время: 20:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.