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

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

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

Регистрация: Apr 2011
Сообщений: 10
По умолчанию addChild в другом классе

Столкнулся с проблемкой, скорей всего из за непонимания чего то базового.
Вызываю метод addChild для отображения текстового поля, вызываю из public функции импортированного класса.
Пока это было в основном файле - всё работало и отображалось, перенёс в другой файл с импортом, всё работает но не отображается.
Пробовал stage.addChild(...) - не работает.
Подскажите пожалуйста кто знает.

Старый 28.04.2011, 10:52
Cornford вне форума Посмотреть профиль Отправить личное сообщение для Cornford Найти все сообщения от Cornford
  № 2  
Ответить с цитированием
Cornford

Регистрация: Oct 2009
Сообщений: 174
точно не уверен но я как думаю, stage может быть только один.
поэтому неглавный класс может принимать параметр stg:Stage, и на него уже делать stg.addChild();

Старый 28.04.2011, 11:03
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
точно не уверен но я как думаю, stage может быть только один.
свойство stage есть у любого дисплей объекта, но
для того, чтобы удостовериться, что stage != null, перед тем как что-либо добавлять на сцену, нужно использовать Event.ADDED_TO_STAGE
Lesorub, не видя кода, на это вопрос невозможно ответить.
Но скорее всего не создан экземпляр первого класса во втором, или он сам не добавлен в список отображения. Короче говоря, код в студию.


Последний раз редактировалось goodguy; 28.04.2011 в 11:59.
Старый 28.04.2011, 11:55
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
точно не уверен но я как думаю, stage может быть только один.
Так и есть.
Stage - > root - > DO. Стейдж он всегда один, так же как и рут, просто из любого добавленного на сцену объекта, до нее достучаться можно легко.
__________________
Марк Tween

Старый 29.04.2011, 03:23
Lesorub вне форума Посмотреть профиль Отправить личное сообщение для Lesorub Найти все сообщения от Lesorub
  № 5  
Ответить с цитированием
Lesorub

Регистрация: Apr 2011
Сообщений: 10
Код, оригинальный слишком большой , накидал пару примеров.

Простой код который работает:
Код AS3:
package
{
	import flash.text.TextField;	
	public class NewClass 
	{
		private var ttt:TextField;
		public function NewClass() 
		{
			 ttt = new TextField();
			 ttt.x = 250;
			 ttt.y = 235;
			 ttt.text = "Some Smart Text";
			 addChild(ttt);
		}
	}
}

Делаю отдельный файл класса помещаю в папку jjj вызываю из основного файла
Это не работает:
Код AS3:
package jjj 
{
	import flash.text.TextField;
 
	public class testClass 
	{
		private var ttt:TextField;
		public function TTT() 
		{
			 ttt = new TextField();
			 ttt.x = 250;
			 ttt.y = 235;
			 ttt.text = "Some Smart Text";
			 addChild(ttt);
		}
 
	}
 
}
///////////////////////////////////////////////////
Код AS3:
package 
{                                       
	import flash.display.Sprite;
        import jjj.testClass;
	public class Main extends Sprite 
	{
		private var mySmartText:testClass;
		public function Main():void 
		{
                     mySmartText = new testClass();	
		     mySmartText.TTT();
		}
	}
}

А вот это заработало ) спасибо Cornford! :
Код AS3:
package jjj 
{
	import flash.display.Stage;
	import flash.text.TextField;
	import flash.display.Sprite;
 
	public class testClass 
	{
		private var ttt:TextField;
		public function TTT(stg:Stage):void 
		{
			 ttt = new TextField();
			 ttt.x = 250;
			 ttt.y = 235;
			 ttt.text = "Some Smart Text";
			 stg.addChild(ttt);
		}
	}
}
///////////////////////////////////
Код AS3:
package 
{                                       
	import flash.display.Sprite;
        import jjj.testClass;
	public class Main extends Sprite 
	{
		private var mySmartText:testClass;
		public function Main():void 
		{
                     mySmartText = new testClass();	
		     mySmartText.TTT(stage)
		}
	}
}
Правда не совсем понятен принцип, получается при обращение к функции импортированного класса нельзя напрямую из этой функции добавить в список отображения addChild(ttt); ???

Старый 29.04.2011, 08:20
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Взять, например, вот этот код:
Код AS3:
package jjj 
{
	import flash.text.TextField;
 
	public class testClass 
	{
		private var ttt:TextField;
		public function TTT() 
		{
			 ttt = new TextField();
			 ttt.x = 250;
			 ttt.y = 235;
			 ttt.text = "Some Smart Text";
			 addChild(ttt);
		}
 
	}
 
}
И конкретно метод addChild(ttt);

Куда этот ttt добавляется?

По сути
Код AS3:
addChild() = this.addChild();
А для того, чтобы можно было добавить какой-либо объект внутрь другого объекта, этот другой (родительский) контейнер должен наследовать от DisplayObjectContainer'а

Что мы видим в этом коде?
Код AS3:
public class testClass
От чего он наследует? Object? Естественно ничего не добавится.

Для начала нужно исправить это.
Код AS3:
public class testClass extends Sprite
После этого добавить на сцену экземпляр самого testClass
и уже после этого метод addChild(ttt); сработает как и задумывалось

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

Регистрация: Apr 2011
Сообщений: 10
goodguy Спасибо за разьяснения!
сейчас буду тестить

Добавлено через 11 часов 54 минуты
Код AS3:
public class testClass extends Sprite
добавил extends Sprite.
Кампилятор теперь эррор не выдаёт, но всё равно ничего не отображается.

Натолкнулся в интернете, на статейку что так дескать и должно быть, и надо добавлять addChild() в главном файле, что есть крайне не удобно.
(разные stage что ли ??? )
Пока что остановился на методе Cornford_а с пересылкой stage в ипортированный класс.

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

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

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


 


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


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