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

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

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

Регистрация: Jun 2009
Сообщений: 461
По умолчанию Почему дочерний мувик не получает переменную?

Есть главная функция Main, которая создает дочерний мувик MainLayer и передает туда переменную:
Код AS3:
	public class Main extends MovieClip {
 
		var MainVar:Number=241;
		var MainLayer_Provider:MainLayer;
 
		function Main():void {
			MainLayer_Provider=new MainLayer  ;
			MainLayer_Provider.Provider_Var(MainVar);
			addChild(MainLayer_Provider);
		}
	}//class
А в классе дочернего мувика я пытаюсь эту переменную затрэйсить:
Код AS3:
	public class MainLayer extends MovieClip {
 
		var MainVar:Number;
 
		function MainLayer():void {
			trace(MainVar);
		}
		function Provider_Var(PV_Var):void {
			MainVar=PV_Var;
		}
	}//class
Но у меня ничего не выходит, он трэйсит NaN. Помогите, пожалуйста, решить проблему.

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

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
trace в конструкторе... а значение вы передаете в Provider_Var
совсем не удивительно что на тот момент ваша переменная NaN

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

Регистрация: Jun 2009
Сообщений: 461
А как правильно? То что для вас не удивительно, для меня удивительно. Смысл писать сообщение, которое ничего не объясняет?
Ведь я обращаюсь к конструктору после того как передал переменную.

Старый 15.09.2009, 19:51
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 4  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
попробуй так :

Код AS3:
public class MainLayer extends MovieClip {
 
		var MainVar:Number;
 
		function MainLayer():void {
 
		}
		public function Provider_Var(PV_Var):void {
			MainVar=PV_Var;
                         trace(MainVar);
 
		}
	}//class
или
в родителе вызвать
Код AS3:
MainLayer_Provider=new MainLayer(MainVar)  ;
в дочернем принять
Код AS3:
public class MainLayer extends MovieClip {
 
		var MainVar:Number;
 
		function MainLayer(PV_Var:Number):void {
MainVar=PV_Var;
			trace(MainVar);
		}
	}//class
Добавлено через 3 минуты
Должно всё работать


Последний раз редактировалось WRC_S; 15.09.2009 в 19:54.
Старый 15.09.2009, 20:01
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 5  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Код AS3:
	public class MainLayer extends MovieClip {
 
		var MainVar:Number;
 
		function MainLayer():void {
                //Конструктор 
                // Вызывается при создании экземпляра 
                // этой строчкой MainLayer_Provider=new MainLayer()  ;
 
			trace(MainVar);//trace возвращает здесь NaN
                // потому что значение MainVar  вы присваиваете позже.
                // потому вас совсем не должно это удивлять
		}
 
                // вот этой строчкой MainLayer_Provider.Provider_Var(MainVar);
                // вы вызываете эту функцию и присваиваете тем самым 
                // значение переменной.
		function Provider_Var(PV_Var):void {
			MainVar=PV_Var;
                // trace(MainVar) нужно ставить здесь.
		}
	}//class

Старый 15.09.2009, 20:08
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 6  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
Цитата:
Сообщение от Tr1te Посмотреть сообщение
А как правильно? То что для вас не удивительно, для меня удивительно. Смысл писать сообщение, которое ничего не объясняет?
Ведь я обращаюсь к конструктору после того как передал переменную.
ты уже вызвал конструктор до передачи переменной создав его MainLayer_Provider=new MainLayer;

а addChild(MainLayer_Provider); ты не вызываешь конструктор, а просто дабавляешь уже готовый класс на сцену!!!

Старый 15.09.2009, 20:18
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 7  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Теперь понятно, спасибо.
Но как быть если нужно чтобы в главном классе создавалась переменная, потом передавалась в дочерний мувик, и в конструкторе дочернего мувика эта переменная использовалась. Например трэйсилась.

Старый 15.09.2009, 20:24
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 8  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
зачем в конструкторе трейсеть? ты до создания ребёнка не сможешь в него не чё запихать! создаёшь ребёнка потом пихаешь в него переменную когда надо и всё, потом чтобы отрейсить переменную ребёнке вызывай ещё одну функцию с родителя после таго как запехнёшь переменую. типа как я первый пример привёл!

Старый 15.09.2009, 20:28
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 9  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от Tr1te Посмотреть сообщение
Например трэйсилась.
Код AS3:
public class MainLayer extends MovieClip {
 
		var MainVar:Number;
 
		function MainLayer(val:Number):void {
                        MainVar = val
			trace(MainVar);
            	}
 
	}//class
 
     // В главном классе MainLayer_Provider=new MainLayer(MainVar);

Старый 15.09.2009, 20:34
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 10  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
я иму такую штуку приводил, ему походу надо, сначало создать класс а потом когданибудь когда в главном класе созреет переменнай уже пихнуть в дочерний класс, а не сразу при создании как я понял от него!

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

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

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


 


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


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