Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.08.2013, 20:06
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 1  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
По умолчанию Не работает вызов функции в мувиклипе

Добрый день!

Столкнулся сегодня с проблемой странного характера... Мой скрипт создаёт мувиклипы динамически с помощью attachMovie. Код следующий:

Код AS1/AS2:
var test_mc:MovieClip = _root.Root.attachMovie("test1",newname,_root.Root.getNextHighestDepth(),{_height:_root.slotH });
 
test_mc.activameMe();
Но вторая строчка не работает... В клипе test1 в первом кадре есть функции

Код AS1/AS2:
activameMe = function()
{
     trace("success");
}
onRelease = function()
{	
	trace("clip released");
	shutdownAndRemove();
}
Но activameMe вызваться и не собирается. При этом, я спокойно вызываю функцию test_mc.onRelease(), и всё работает. Есть предположение, что на инициализацию функций уходит время, и на момент вызова она ещё не активна. Посоветуйте пожалуйста решение.

Старый 03.08.2013, 10:12
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 2  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Сама по себе задача, конечно же, интересная.
Но так делать не рекомендую.
Если у вас 100 клипов, и в каждом свой код, то найти его будет крааайне сложно.
Поэтому делаем так:

Код AS1/AS2:
var test_mc:MovieClip = _root.Root.attachMovie("test1",newname,_root.Root.getNextHighestDepth(),{_height:_root.slotH });
 
test_mc.activameMe = function(){
     trace("success");
}
 
test_mc.onRelease = function(){	
	trace("clip released");
	shutdownAndRemove();
}
 
test_mc.activameMe();
И наслаждаемся жизнью. К слову сказать - при таком подходе вам не придется вкопипащивать в каждый клип один и тот же сходный код.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 03.08.2013, 14:24
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 3  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Интересный подход. Да, у меня в каждом клипе достаточно много кода. Долго рылся в интернете, и выяснил, что attachMovie в принципе не задействует событий вроде onLoad, так что отследить полную инициализацию сложновато.

Пока пробовал вчера, придумал вот такой способ:

в _root:
Код AS1/AS2:
var test_mc:MovieClip = _root.Root.attachMovie("test1",newname,_root.Root.getNextHighestDepth(),{_height:_root.slotH });
в клипе test1:

Код AS1/AS2:
 
onEnterFrame = function()
{
   activateMe();
}
 
activameMe = function(){
     delete this.onEnterFrame;
     trace("success");
}
В общем, основывался на том, что заранее угадать время инициализации не получится, и поймать событие onLoad тоже не удастся. Но зато событие onEnterFrame всегда срабатывает автоматически, так что я решил вызвать функцию с первым фреймом инициализированного клипа, после чего функция onEnterFrame удаляется. Возможно кому-то пригодится.

Старый 04.08.2013, 13:13
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Не. Это костыли. Жуткие. Будет у кого-то работать, у кого-то нет.

У меня не "интересный подход", а единственно верный в данном случае
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 04.08.2013, 16:36
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 5  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
А если функция слишком большая по объёму, и её неудобно прописывать в руте каждый раз?

Старый 05.08.2013, 03:16
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 6  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Нет. Если она слишком большая - вы что-то либо неправильно делаете, либо неверно себе представляете программные структуры.

Если вы живете в СПб - можно потусить и послушать меня на видео.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 05.08.2013, 16:28
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 7  
Ответить с цитированием
Alex626

Регистрация: Sep 2010
Сообщений: 167
Да нет, не в Питере...

У меня сложный интерфейс RPG инвентаря, кода приходится писать много.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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