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

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

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

Регистрация: Mar 2013
Сообщений: 290
По умолчанию Мультикадровый мувиклип: обращение к клипам кадров

Вот тоже непонятная засада.

В библиотеке Flash IDE оздан многокадровый мувиклип.
У него 10 кадров. В каждом кадре расположено по одному мувиклипу.
В поле Instance Name каждого такого мувиклипа прописано: mc_1, mc_2, mc_3... mc10.

И теперь в одной из функций Класса имеем примерно вот такой код:

Код AS3:
var currName:String;
gotoAndStop(currFrame);  //currFrame содержит номер кадра клипа-родителя.
currName = "mc_" + String(currFrame);
currClip = this.getChildByName(currName) as MovieClip; //currClip - ссылка на вложенный клип.
trace("TEST: currClip = ", currClip, " name = ", currClip.name);
И вот что странно, когда родитель переключён на 1-ый фрэйм, трэйс отрабатывает нормально:
Цитата:
TEST: [object MovieClip] name = mc_1
Но когда он переключается на второй, возникает ошибка:
Цитата:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
И если трейсить просто как currClip то выдается значение null.

И получается, я могу получить ссылку на клип первого фрэйма, но при получении ссылок на клипы последующих фрэймов они равны null.

Странно, что я делаю не так?
Или может в мультифрэймовом доступе есть некая специфика?

Старый 06.04.2014, 15:49
BornTOFree вне форума Посмотреть профиль Отправить личное сообщение для BornTOFree Найти все сообщения от BornTOFree
  № 2  
Ответить с цитированием
BornTOFree

Регистрация: Oct 2010
Сообщений: 85
Если я не ошибаюсь, то для доступа к свойствам объекта, все они должны находиться на первом кадре. Попробуйте.
Почему вы используете такой подход? из библиотеки нет возможности мувики брать?

Старый 06.04.2014, 18:43
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
проблема не воспроизводится по описанию, все работает
Вложения
Тип файла: zip test.zip (8.3 Кб, 22 просмотров)

Старый 07.04.2014, 09:31
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 4  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
BornTOFree,
Цитата:
Если я не ошибаюсь, то для доступа к свойствам объекта, все они должны находиться на первом кадре. Попробуйте.
Ну вот, тоже такое впечатление сложилось.
И кстати, может быть в этом и состоит смысл галочки Linkage: Export in first frame.

Цитата:
Почему вы используете такой подход? из библиотеки нет возможности мувики брать?
Просто я думал что это будет проще. К тому же, товарищ КореДум где-то писал, что так не нужно заморачиваться с удалением клипов, и со снятием листенеров.
Вот я и подумал такой вариант испытать. Но тут свои проблемы... Так что наверное придется, да, из массива брать клипы, через аддчайлд, ремувчайлд, и т.п.

silin,
Цитата:
проблема не воспроизводится по описанию, все работает
К сожалению не могу запустить ваш пример, у меня Flash CS3.
Вероятно у вас CS5 или вроде того. Может, кстати, это именно баг старых версий флэша.

Старый 07.04.2014, 09:36
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
пересохранил под cs3
Вложения
Тип файла: zip test_cs3.zip (14.4 Кб, 13 просмотров)

Старый 07.04.2014, 09:41
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
упс, персохранил, а не проверил..
>> Может, кстати, это именно баг старых версий флэша.
действительно: при компиляции под 9ю версию - описанный вами баг, под 10ю - все норм

зы: имо, в любом случае, такой подход никакой простоты\удобства не дает, нет смысла с ним возится

Добавлено через 9 минут
обойти можно, обращаясь к клипам в следующем такте enterFrame, например так (применительно к моему примеру)
Код AS3:
package  
{
	import flash.display.MovieClip;
	import flash.utils.setTimeout;
 
 
	public class Symbol1 extends MovieClip 
	{
 
		public function Symbol1() 
		{
 
			test(1);
			test(2);
			test(3);
 
		}
		private function test(currFrame:int):void
		{
			gotoAndStop(currFrame);  
			setTimeout(delayedTest, 20);
 
		}
		private function delayedTest():void
		{
			var currName:String = "mc_" + String(currentFrame);
			var currClip:MovieClip = this.getChildByName(currName) as MovieClip; //currClip - ссылка на вложенный клип.
			trace("TEST: currClip = ", currClip, " name = ", currClip.name);
		}
	}
 
}

Старый 07.04.2014, 10:02
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 7  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
silin, большое спасибо за прояснение версионности бага.
Говорил мне Wolsh выбросить cs3, а я вот тут всё... ; )

Сейчас попробую ваш пример адаптировать к моему случаю.

Кстати, погуглил немного и нашёл вот такую тему, вероятно, может быть связана с техникой обхода этого бага.

Добавлено через 1 час 41 минуту
UPD:

Погонял с delay, всё работает, спасибо.
Правда пару раз словил null-ошибку при быстром переключении фрэймов.
Поставил время задержки чуть выше чем FrameRate, и, похоже, это решило вопрос.

Добавлено через 4 часа 30 минут
UPD2
Однако, бывают null-баги и при чуть завышенных значениях делэй.
Но чем выше делэй, тем вероятность меньше. Но тогда больше вероятность дерганий в начальной фазе анимации клипа.

Так что да, похоже лучший подход это массив с клипами.


Последний раз редактировалось Fogflasher; 07.04.2014 в 10:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
multiframe movieclip , многокадровый доступ
Опции темы
Опции просмотра

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

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


 


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


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