![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 32
|
Подскажите плиз - есть такой код (картинка нормально подгружается но обработчик onRelease не работает
)var loader_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
loader_mcl.addListener(listener);
set_thumbnail();
function set_thumbnail( )
{
this.createEmptyMovieClip("img_thumb", 0);
loader_mcl.loadClip("suse10_t.jpg", this.img_thumb);
}
trace("img_thumb = " + this.img_thumb._name);
this.img_thumb.onRelease = function()
{
trace("Release entered");
}
listener.onLoadInit = function(target_mc:MovieClip) {
target_mc._x = 544;
target_mc._y = 107;
}
- т.е. объект существует - по идее должен присваиватся обрабтчик сообщений и работать. Причем если я обрабтчик размещаю в onLoadInit подобным образом listener.onLoadInit = function(target_mc:MovieClip) {
target_mc._x = 544;
target_mc._y = 107;
target_mc.onRelease = function()
{
trace("Release entered");
}
}
Желательно если укажете мне место в хелпе или статью какую (можно на инглиш) где прямо написанно почему работает так а не этак... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
"Машенька, а как тебя зовут?"
Конечно же onRelease должен вешаться на клип только после загрузки, т.е. когда сработает onLoadInit.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 32
|
2Wolsh - а есть где написанно об этом? Блин никак не могу найти как сообщения ходят в хелпе .. Все равно не понятно - а можно в жтом случае определить обработчик не в тебе другой функции?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не совсем понятно, что Вы имеете в виду...
"не в тебе другой функции" - значит "в теле этой" какой ЭТОЙ? Может проще объяснить, чего Вы хотите добиться, что это будет.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 32
|
2Wolsh - я имел ввиду что хотел бы избежать определения функции обрабтчика onRelease в теле функции onInit - так как такие определения ведут к порождению запутанного и плохочитаемого кода (имхо конечно).
Во вторых мне не очень понятна логика флэша в том смысле - что я должен ждать пока в мувик загрузится содержимое что бы определить обработчик события. Отсюда вопрос - есть ли разделы хелпа или сторонние статьи (можно на инглиш) в которых хорошо разжеванная вот такая мудреная логика .. Просто я вот еще совсем новичок в AS хотя раньше писал много на С++ и у меня в процессе написания просто на кажом шагу затык какой то - измучился я совсем. |
|
|||||
|
listener
|
В вашем примере логика такова, имхо.
вы создали ПУСТОЙ мувик "img_thumb" и попытались ТУТЖЕ повесить на него "onRelease" - обработчик не работает, хотябы потому, что в этот момент "img_thumb" имеет размеры 0х0 если вешать "onRelease" на НЕПУСТОЙ мувик, т.е с уже загруженной картинкой - все в порядке. проблема в том что выполняется РАНЬШЕ, чем т.к. загрузка идет асинхронно. некрасивость можно легко исправить var handleFunc = function () {
trace("Release entered");
};
var loader_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
loader_mcl.addListener(listener);
set_thumbnail();
function set_thumbnail() {
this.createEmptyMovieClip("img_thumb", 0);
loader_mcl.loadClip("suse10_t.jpg", this.img_thumb);
}
trace("img_thumb = " + this.img_thumb._name);
listener.onLoadInit = function(target_mc:MovieClip) {
target_mc._x = 544;
target_mc._y = 107;
target_mc.onRelease = handleFunc;
};
что касается общего понимания и разжевывания - то как говорится "мы все учились по-немногу, чему-нибудь и как-нибудь..." искать базовые знания в нете - полный изврат, вмечсто знаний получится каша в голове. варианты: - обычная книга (на этом форуме особой популярностью пользуется (и вполне заслуженно) автор Колин Мук (Colin Moock, http://moock.org) и как минимум два его бестселлера "ActionScript for Flash MX: The Definitive Guide" "Essential ActionScript 2.0" (есть переводы, ссылок на скачку нет!) - хороший наставник. Наилучшим результатам способствует сочетание 1 и 2 Последний раз редактировалось alexcon314; 19.10.2007 в 23:44. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
alexcon314 , отличный ответ, только одна поправка. Обработчик не работает не потому что размер клипа 0х0
Нет, всё гораздо логичнее. Просто после загрузки нового содержимого в клип все повешанные на него обработчики отменяются (слетают). Это легко проверить, создав my_mc вручную, с какой-нить картинкой внутри, поместив его на сцене. И повесить, скажем, такой кодПосле загрузки картинки никакого релиза не будет. По аналогии с работой вручную это примерно тоже самое, что перейти с одного ключевого кадра, на котором повешен код, на другой ключевой кадр, где кода с обработчиком уже нет, хотя экземпляр вроде тотже и даже с тем же именем - код с первого ключевого кадра на него уже не действует. Т.е. имя остается, но сам объект уже считается другим, прежний удаляется - ну и логично, что его обработчики удаляются вместе с ним. но есть интересный момент - его свойства при этом не удаляются и переходят объекту с таким же именем, т.е. в данном случае - преемнику Именно поэтому новая картинка будет иметь те же координаты, что и созданный вручную my_mc. Переменные типа my_mc.a также останутся в доступе. Я думаю, это вызвано простой экономией ресурсов - при удалении "первого" my_mc переменные не удаляются по той простой причине, что с исчезновением my_mc вроде как пропадает ссылка на них (my_mc.a).
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 20.10.2007 в 00:48. |
|
|||||
|
listener
|
"мы все учились по-немногу, чему-нибудь и как-нибудь..."
я действительно этого не знал, спасибо. впрочем я исходил из этого обработчик onRelease не работает из-за "0х0" имхо, причем тут загрузка? хотя это, конечно не относится к примеру темы, дествительно: ОДИН раз выводит в output EnterFrame Последний раз редактировалось alexcon314; 20.10.2007 в 01:03. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
>> обработчик onRelease не работает из-за "0х0" имхо, причем тут загрузка?
Поделись как проверял? ![]()
__________________
Reality.getBounds(this); |
|
|||||
|
listener
|
в output ничего не выводит. возможная причина - нулевой размер клипа.
сам обработчик у клипа есть. вот и вся проверка. физически не возможно реализовать onRelease у объекта нулевых размеров. разве не логично? |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|