Просмотр полной версии : Доступ к компоненту Label
Почему я не могу получить доступ к компоненту Label.text, который находится на клипе, который я приаттачиваю к основному(_root.attachMovie('inf','inf',1)) ?
если я его просто скидываю на основной клип этот компонет, то я могу изменять свойство text.
Вот пример:
уже привел, взгляните пожалуста.
не первый раз не могу запустить скачанный пример в своем FlashMX 2004, 7-я версия... не пойму почему
Наверно по тому что я использовал Macromedia flash 8 Pro.
Вот код в основном клипе:
stop();
_root.t1.text = "dsfffffffffffffffffff";
_root.attachMovie('clip','clip',2);
_root.clip.t2.text = "dsfffffffffffffffffff";
На основной клип скидываю компонент Label и даю ему имя t1, создаю еще один клип с именем clip, на него кидаю еще label и даю имя t2.
дело здесь в том, что классы приаттаченного мувика еще не проинициализированы, когда ты пытаешься то text добраться..
в этом случае достаточно сделать это в следующем фрейме:
_root.attachMovie('clip','clip',2);
function onEnterFrame(){
_root.clip.t2.text = "222";
onEnterFrame=null;
}
спасибо за помощь!
У меня вопрос, а что означает onEnterFrame=null;?
да null и означает, не нужен он больше..
А как сделать на оборот, чтобы активировать onEnterFrame?
а наоборот, стало быть не null Ж)
function setTextLater(){
_root.clip.t2.text = "222";
onEnterFrame=null;
}
onEnterFrame=setTextLater;
Попробывал, ни какого эффекта(неактивируется) - смотрел в хелпе, такой функции нет в Флеш 8, пробывал логическое значение - ошибка(Type mismatch in assignment statement: found Boolean where Function is required.)
числовое - все равно ошибка(...found Number where Function is required.)
Я ваще не догоняю, зачем это вам надо. Пачему Label и почему в мувиклипе нужен компонент UI. Ну я бы сделал все таки как то так.->
PS: 23 кило на вывод 2х строк текста. Ну ну.
>>смотрел в хелпе, такой функции нет в Флеш 8
путаница:
такой функции действительно нет, это обработчик, который (если определен для мувика) будет вызываться на каждом такте (фрейме) плеера
определить его можно написав в кадре
function onEnterFrame(){
_root.clip.t2.text = "222";
onEnterFrame=null;
}
или присвоив onEnterFrame какой-то заранее определенный метод..
mc.onEnterFrame =someMethod;
соответсвенно mc.onEnterFrame =null убьет ссылку на функцию, обработчик не будет вызываться..
2aksios: Label.text не рид онли (с чего бы?), дело имеено в том, что доступ к сеттеру будет организован только в следующем кадре
Удалять надо, а не null присваивать.
'надо' это слишком категорично..:)
'можно', 'лучше' (потому-то), 'удобнее' (потому-то) - еще куда ни шло..
Не, наоборот. Лучше ты объясни, почему не надо удалять, а присваивать null. Я вот не вижу ни одной причины для этого.
нет, не наоборот: я же не говорил, что надо присваивать null, а не удалять :)
подозреваю, что есть нюансы, раз ты пишешь , но я, собственно, не встречал проблем с этим, типа халдеи (GC) подберут..), может потому так беспечен..
На самом деле удалить онЕнтерФрейм нельзя %) т.е. он всегда существует у любого потомка МувиКлипа (Вернее, даже не так, все потомки МувиКлипа подписаны на событие с одноименным названием.). Но с практической точки зрения, лучше делать то, что предлагает iNils. Т.как "сборщик мусора" на каком-то этапе почистит место в памяти отведенное под этот ентерФрейм, а если присвоить ему значение - то он не будет чистить его никогда.
>>удалить онЕнтерФрейм нельзя %) т.е. он всегда существует
путаница: onEnterFrame это ссылка на метод, плеер всегда пытается его вызвать, и если он определен (существует) то и вызовется, если нет, то и не надо..
>>а если присвоить ему значение - то он не будет чистить его никогда.
тоже путаница:
onEnterFrame всего лишь ссылка на метод, ее-то мусорщик все равно не трогает, речь о методе на который onEnterFrame ссылается
после delete onEnterFrame;
onEnterFrame будет undefined;
после onEnterFrame=null;,соотвественно null
и в том и в другом случае сборщик удалит метод на который ссылался onEnterFrame
определить его можно написав в кадре
Так я так и сделал, все равно не идет, вот взгляните:
все как написано, так и работает
что "не идет" не понятно..
почему тогда приатаченный клип не начинает двигаться?
terbooter
20.11.2007, 07:09
У меня тоже работает так как и написано.
При первом щелчке останавливается при втором меняет текст.
Если проблема не решена, то попробуй использовать setInterval
закомменентируй
/*function onEnterFrame(){
_root.clip.t2.text = "222";
_root.clip._x++;
//onEnterFrame=null;
}
*/
И добавь
ID = setInterval(initLabel, 10);
function initLabel()
{
_root.clip.t2.text = "222";
}
У меня хватает 10 милисикунд для инициализации компонента.
Когда впервые я наткнулся на твою проблему, то был несколько озадачен.
Я перепробовал много стандартных компонентов - 10 милисекунд хватает всем
Про delete onEnterFrame и onEnterFrame = null
Давным давно я как то пытался удалить обработчик с помощью delete,
а он никак не хотел удаляться (может руки тогда совсем кривые были ...)
И тут я увидел в каком-то исходнике onEnterFrame = null, заменил у себя
и все заработало!
С тех пор у меня мистический страх перед delete
-))))))))
подождите ...может я что то не понимаю.... вот при зупуске клипа у меня начинает двигаться "222", при клике он останавливается, после второго клика, изменяется надпись и, как я понял, клип "222" должен снова начать двигаться. Или я ошибся?
да,
после второго клика onEnterFrame=echo;
т.е. чтоб клип двигался нужно в echo() добавить _root.clip._x++;
...
onEnterFrame это ссылка на метод, плеер всегда пытается его вызвать, и если он определен (существует) то и вызовется, если нет, то и не надо..
...
Хм, не, не совсем так... null - это значение, т.е. по логике плеера, нужно будет вызвать метод, посчитать чего получилось и т.д... конечно, считать там нечего, но попытка все равно будет. В случае, когда это undefined - даже попытки посчитать не будет. Я не думаю, что будет заметная разница в производительности, но в глобальной перспективе все-таки делит лучше, в конце концов, это его непосредственное назначение =)
очень может быть, что и так..
зы: 'в глобальной перспективе' это removeEventListener :)
delete там (в этой перспективе) вообще почти не при делах
Понятно, теперь разобрался, спасибо silin.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.