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

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

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

Регистрация: Nov 2011
Сообщений: 5
Question Как программно узнать, на каком кадре расположен вложенный мувиклип?

Доброго времени суток!
Совсем замучился искать ответ на следующий вопрос.

Есть некий мувиклип А, который содержит вложенный мувиклип Б.
Хочу иметь возможность правильно отобразить произвольный кадр мувиклипа А (чтобы вложенный мувиклип Б также отобразился с правильным кадром).

Например, мувиклип Б вложен в А начиная с 10-го кадра и содержит 10 кадров.
Хочу отобразить 15-й кадр мувиклипа А. (Т.е., должен отобразиться 15-й кадр мувиклипа А и 5-й кадр вложенного мувиклипа Б).

Понятно, что простым gotoAndStop() тут не обойтись.
Попробовал сделать рекурсивную функцию, пробегающую по вложенным мувиклипам и устанавливающую нужный кадр каждому из них. Но как мне программно узнать, что мувиклип Б расположен начиная с 10-го кадра мувиклипа А? Чтобы установить ему требуемый 5-й кадр??

Хочется, чтобы функция была универсальной, то есть работала для произвольных вложенных мувиклипов.

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

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
почему не обойтись?
parent_clip.gotoAndStop(10);
Потом после перерендера (по таймеру, скажем в 200 мс) parent_clip.child_clip.gotoAndStop(5);

Добавлено через 2 минуты
То бишь подписать клип на событие RENDER и можно принудительно перерисовать все через stage.invalidate()
__________________
Кодинг, багинг, алгоритминг. me @

Старый 15.11.2011, 22:08
ValkaVales вне форума Посмотреть профиль Отправить личное сообщение для ValkaVales Найти все сообщения от ValkaVales
  № 3  
Ответить с цитированием
ValkaVales

Регистрация: Nov 2011
Сообщений: 5
Хочется универсальный способ решения данной задачи, для произвольного количества вложенных мувиклипов.

Старый 15.11.2011, 19:54
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 4  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Оцените возможность использования анимированых символов типа Graphic вместо MovieClip.

Если эта замена не слишком сложная - вам хватит простого gotoAndStop(), а вложенные объекты Graphic будут отображаться на нужном кадре.

Что гораздо проще, чем та схема, которую вы хотите реализовать.

Старый 16.11.2011, 01:53
ValkaVales вне форума Посмотреть профиль Отправить личное сообщение для ValkaVales Найти все сообщения от ValkaVales
  № 5  
Ответить с цитированием
ValkaVales

Регистрация: Nov 2011
Сообщений: 5
Уже есть много графики, нарисованной художником. Вложенные мувиклипы в ней используются повсеместно (от искорок при ударах оружием и до превращения из одного персонажа в другой в случае обортня).
Конечно, использование Graphic спасет ситуацию. Но для этого надо проделать немалую работу художнику..

Это был мой запасной вариант, если ничего лучше не придумаю...

Но неужели нет возможности сделать это программно? Просто отобразить некий мувиклип на нужном кадре? Либо узнать, на каком кадре родительского мувиклипа находится заданный мувиклип-child?

2DaFive. Вариант "задать для _каждого_ вложенного мувиклипа свою константу, на каком кадре он находится" по очевидным причинам не подходит.

Старый 16.11.2011, 09:48
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 6  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
не ?
MovieClip#currentFrame
MovieClip#totalFrames
нет, это не то, внимательнее прочитал Ваш вопрос.
Самое простое - пройтись по всему мувиклипу начиная от 0 кадра, делая рекурсивно nextFrame и создавая при этом дерево объектов (parent-child) в котором будет хранится информация, на каком кадре стоит каждый объект.


Последний раз редактировалось zuxul; 16.11.2011 в 09:53.
Старый 16.11.2011, 10:04
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 7  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Код AS3:
от 0 кадра
Нулевого кадра не бывает
__________________
http://www.chessmax.ru

Старый 16.11.2011, 12:08
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 8  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Я думаю, меня все поняли (по крайне мере про нулевой кадр).

Старый 17.11.2011, 07:17
ValkaVales вне форума Посмотреть профиль Отправить личное сообщение для ValkaVales Найти все сообщения от ValkaVales
  № 9  
Ответить с цитированием
ValkaVales

Регистрация: Nov 2011
Сообщений: 5
Спасибо, zuxul. Действительно, этот подход работает. Оказывается, мое представление о мувиклипах и их child-ах было не совсем верным Как-то и подумать раньше не мог, что в разных кадрах число child-ов мувиклипа может быть различным.

Правда, делать дерево объектов я не стал, а нашел более простое (и в моем случае идеально работающее) решение.

1) Вначале рекурсивно сбрасываем все-все вложенные мувиклипы (во всех кадрах) на 1-й кадр.
2) Для перехода на N-й кадр N раз вызываем ф-цию nextFrame() (опять таки, делаем это рекурсивно, но уже с "простой" рекурсией, без пробежки по всем кадрам).

Работает на ура Еще раз всем спасибо )

Старый 17.11.2011, 12:24
Unidentified2 вне форума Посмотреть профиль Отправить личное сообщение для Unidentified2 Найти все сообщения от Unidentified2
  № 10  
Ответить с цитированием
Unidentified2

Регистрация: Nov 2011
Сообщений: 1
ValkaVales, выложи свои работы плз итоговые. Меня интересует, видимо, очень близкий вопрос, но я не врубился что ты сделал (не знаю АС ещё):

на сцене есть мувклип А. в нём мувклип Б. А и Б полностью одинаковы по кадрам и содержанию, отличаются только названиями. Я хочу что бы на N-ом кадре мувклипа А, появлялся мувклип Б и так же работал как и А (мувклип сделан под кнопку). Но у меня почемуто не получается.

Ошибка: 1120: Обращение несуществующего свойства "Б-мувклип".

вот весь код:

Код AS3:
//---- добавляем кнопки к массиву --------
var buttonsArray:Array = [about_btn,portofolio_btn,contact_btn,new_btn];
 
//----цикл в массиве buttonsArray-----
//----установим некоторые свойства и добавим события кнопкам----
function setButtons():void {
 for (var i:int=0; i<buttonsArray.length; i++) {
  buttonsArray[i].id = i;
  buttonsArray[i].buttonMode = true;
  buttonsArray[i].mouseChildren = false;
  buttonsArray[i].mouseEnabled = true;
  buttonsArray[i].addEventListener(MouseEvent.ROLL_OVER,playOver);
  buttonsArray[i].addEventListener(MouseEvent.ROLL_OUT,playOut);
  buttonsArray[i].addEventListener(MouseEvent.CLICK,doClick);
 }
}
//----выполняется, когда мышь наводится над кнопкой----
function playOver(event:MouseEvent):void {
 event.currentTarget.gotoAndPlay("over");
}
//----выполняется, когда мышь уходит с кнопки----
function playOut(event:MouseEvent):void {
 event.currentTarget.gotoAndPlay("out");
}
//----выполняется, когда мышь кликает кнопку-----
function doClick(event:MouseEvent):void{
  //----установим переменную currentBtn равную----- 
//----идентификатору кнопки (id) , которая была кликнута-----
  var currentBtn:int = event.currentTarget.id;
  //----вызываем функцию setSelectedBtn
  setSelectedBtn(currentBtn);
}
/*проверим, какая кнопка была кликнута,
если id , переданная в функцию setSelectedBtn,
идентична id кликнутой кнопки 
мы полагаем, что кнопки находятся в положении нажатой down (выделенная)
и удаляем все события, добавленные к ней*/  
function setSelectedBtn(id:int):void{
 for (var i:int=0; i< buttonsArray.length; i++) {
  if (id == i) {
  buttonsArray[i].gotoAndStop("down");
  buttonsArray[i].buttonMode = false;
  buttonsArray[i].mouseEnabled = false;
  buttonsArray[i].removeEventListener(MouseEvent.ROLL_OVER,playOver);
  buttonsArray[i].removeEventListener(MouseEvent.ROLL_OUT,playOut);
  buttonsArray[i].removeEventListener(MouseEvent.CLICK,doClick);
  } else {
  if(buttonsArray[i].currentLabel =="down"){
  buttonsArray[i].gotoAndPlay("out");
  }
  buttonsArray[i].buttonMode = true;
  buttonsArray[i].mouseEnabled = true;
  buttonsArray[i].addEventListener(MouseEvent.ROLL_OVER,playOver);
  buttonsArray[i].addEventListener(MouseEvent.ROLL_OUT,playOut);
  buttonsArray[i].addEventListener(MouseEvent.CLICK,doClick);
  }
 }
}
//----вызываем функцию setButtons ----
setButtons();
Не понимаю, почему так то всё работает, а если клип Б кинуть в А, то всё плывёт.. Может ты подскажешь как ты делал?

вот исходники:
Вложения
Тип файла: rar mybutton.rar (7.2 Кб, 58 просмотров)
Тип файла: rar mybutton_new.rar (8.7 Кб, 71 просмотров)

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

Теги
вложенный клип , кадр , мувиклип , смещение , таймлайн

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

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


 


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


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