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

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

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

Регистрация: Aug 2010
Сообщений: 91
По умолчанию Flex, gotoAndStop и элементы на stage

Есть символ, который содержит несколько кадров, каждый кадр имеет имя и содержит некоторые элементы (текстовые поля, картинки и т.п.). Элементы одного кадра могут отсутствовать в других.
В одном кадре есть текстовое поле time, в других нет.

Этот символ эмбедится в класс и в классе есть функция, в которой происходит gotoAndStop(этот кадр) и запись текста в поле.

Но. При первом вызове функции текстовое поле является null (данный кадр не первый). При втором и последующих все нормально. Но если перемотать на другой кадр, то его элементы будут null при первом вызове. При перемотке назад, опять элементы этого станут несуществующими до следующих вызовов.

Выглядит так, как будто флекс не перематывает кадры с первого раза. В чем проблема?

Добавлено через 17 минут
Оказывается он как раз перематывает кадр, но элементы остаются null (а при последующих вызовах, он уже на кадре, потому перематывать не надо, но элементы в какой-то момент появились и остаются доступными)

Старый 04.02.2011, 00:05
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Сразу после вызова gotoAndStop элементы еще неготовы, т.е. они еще не инстанцировались. Как вариант повесьте в классе который содержит этот клип слушатель на ENTER_FRAME, выждите один кадр и можете обращаться к вашим объектам.

P.S. В этом разделе постят вопросы связанные с использованием flex framework. То, что вы компилируете ваше приложение с использованием Flex SDK, не делает его "флекс-приложением". Подобные вопросы лучше постить в разделе ActionScript 3.

Старый 04.02.2011, 11:38
Robotex вне форума Посмотреть профиль Отправить личное сообщение для Robotex Найти все сообщения от Robotex
  № 3  
Ответить с цитированием
Robotex

Регистрация: Aug 2010
Сообщений: 91
А как выждать один кадр? Дело в том, что там каждый кадр является ключевым. Если выждать один кадр, флекс перемотает на следующий, уже с другими контролами (а код во фреймах флекс не выполняет, потому сделать несколько кадров и поставить stop() в последнем нельзя).

Я так понял, перед перемоткой подписываемся на ENTER_FRAME, а в обработчике этого события обращаемся к контролам?

P.S. Как перенести тему?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
А как выждать один кадр?
Код AS3:
var clipWithControls:MovieClip = new MyClip();
private function gotoCotrols():void
{
   clipWithControls.gotoAndStop(2);
   addEventListener(Event.ENTER_FRAME, waitNextFrame);
}
private function waitNextFrame(event:Event):void
{
    removeEventListener(Event.ENTER_FRAME, waitNextFrame);
    //вот тут контролы должны быть готовы
}

Старый 04.02.2011, 19:02
Robotex вне форума Посмотреть профиль Отправить личное сообщение для Robotex Найти все сообщения от Robotex
  № 5  
Ответить с цитированием
Robotex

Регистрация: Aug 2010
Сообщений: 91
Не, все равно проблема остается.

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

Регистрация: Jul 2008
Сообщений: 107
Дайте, пожалуйста, кусок исходника. Будет гораздо быстрее.

Старый 04.02.2011, 22:45
Robotex вне форума Посмотреть профиль Отправить личное сообщение для Robotex Найти все сообщения от Robotex
  № 7  
Ответить с цитированием
Robotex

Регистрация: Aug 2010
Сообщений: 91
Код AS3:
public function showFeaturedItemToolTipAt(text:String):void
		{
			gotoAndStop("featuredItemToolTip");
			var format:TextFormat	= new TextFormat(FontManager.LaCartoonerie, 12, 0x000000, true);
			time.visible == false;
			time.defaultTextFormat = format;
			time.embedFonts = true;
			time.text = text;
			time.width = time.textWidth + 5;
			var whiteSpace:int = bg.width - (time.width + fbIcon.width + 5);
			time.x = bg.x + whiteSpace/2;
			fbIcon.x = time.x + time.width + 5;
			time.visible == true;
		}
time это текстовое поле в символе. Существует только в кадре featuredItemToolTip

Старый 04.02.2011, 23:34
Lou вне форума Посмотреть профиль Отправить личное сообщение для Lou Найти все сообщения от Lou
  № 8  
Ответить с цитированием
Lou
 
Аватар для Lou

Регистрация: Jul 2008
Сообщений: 107
А точно пробовали то, что alatar писал?
По сути что-то вроде этого должно работать:
Код AS3:
private function onSmth():void {
mc.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
mc.gotoAndStop("frameWithTextField");
}
private function onEnterFrameHandler(event:Event):void {
if(mc.currentFrameLabel == "frameWithTextField") {
mc.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
time.text = "12.00";
}
}
Вы сделали так и оно не работает, верно?

Старый 05.02.2011, 02:44
Robotex вне форума Посмотреть профиль Отправить личное сообщение для Robotex Найти все сообщения от Robotex
  № 9  
Ответить с цитированием
Robotex

Регистрация: Aug 2010
Сообщений: 91
Да, сделал именно так. Тем более, что mc.currentFrameLabel == "frameWithTextField" сразу после строчки mc.gotoAndStop("frameWithTextField"); если верить дебаггеру. Самое примечательно, что у людей, которые писали этот код, он прекрасно работает (это игра на фейсбука). А у нас (мы портируем ее) вылазят глюки в этом месте. Может версия флекса влияет или настройки компилятора?

Старый 05.02.2011, 03:05
Lou вне форума Посмотреть профиль Отправить личное сообщение для Lou Найти все сообщения от Lou
  № 10  
Ответить с цитированием
Lou
 
Аватар для Lou

Регистрация: Jul 2008
Сообщений: 107
У меня ошибка mc.time.text = "...";
Значит что-то вы все-таки упустили... Не знаю как вам помочь. Можете еще кусок fla кинуть. Возможно, когда собирать будете , то увидите в чем была беда. Так часто бывает..

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

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

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


 


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


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