|
|
|||||
Регистрация: Apr 2011
Сообщений: 10
|
addChild в другом классе
Столкнулся с проблемкой, скорей всего из за непонимания чего то базового.
Вызываю метод addChild для отображения текстового поля, вызываю из public функции импортированного класса. Пока это было в основном файле - всё работало и отображалось, перенёс в другой файл с импортом, всё работает но не отображается. Пробовал stage.addChild(...) - не работает. Подскажите пожалуйста кто знает. |
|
|||||
Регистрация: Oct 2009
Сообщений: 174
|
точно не уверен но я как думаю, stage может быть только один.
поэтому неглавный класс может принимать параметр stg:Stage, и на него уже делать stg.addChild(); |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
для того, чтобы удостовериться, что stage != null, перед тем как что-либо добавлять на сцену, нужно использовать Event.ADDED_TO_STAGE Lesorub, не видя кода, на это вопрос невозможно ответить. Но скорее всего не создан экземпляр первого класса во втором, или он сам не добавлен в список отображения. Короче говоря, код в студию. Последний раз редактировалось goodguy; 28.04.2011 в 11:59. |
|
|||||
[+4 06.05.14]
|
Цитата:
Stage - > root - > DO. Стейдж он всегда один, так же как и рут, просто из любого добавленного на сцену объекта, до нее достучаться можно легко.
__________________
Марк Tween |
|
|||||
Регистрация: Apr 2011
Сообщений: 10
|
Код, оригинальный слишком большой , накидал пару примеров.
Простой код который работает: 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 вызываю из основного файла Это не работает: 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); } } } 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! : 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); } } } Правда не совсем понятен принцип, получается при обращение к функции импортированного класса нельзя напрямую из этой функции добавить в список отображения addChild(ttt); ??? |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Взять, например, вот этот код:
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); } } } Куда этот ttt добавляется? По сути А для того, чтобы можно было добавить какой-либо объект внутрь другого объекта, этот другой (родительский) контейнер должен наследовать от DisplayObjectContainer'а Что мы видим в этом коде? От чего он наследует? Object? Естественно ничего не добавится. Для начала нужно исправить это. После этого добавить на сцену экземпляр самого testClass и уже после этого метод addChild(ttt); сработает как и задумывалось |
|
|||||
Регистрация: Apr 2011
Сообщений: 10
|
goodguy Спасибо за разьяснения!
сейчас буду тестить Добавлено через 11 часов 54 минуты добавил extends Sprite. Кампилятор теперь эррор не выдаёт, но всё равно ничего не отображается. Натолкнулся в интернете, на статейку что так дескать и должно быть, и надо добавлять addChild() в главном файле, что есть крайне не удобно. (разные stage что ли ??? ) Пока что остановился на методе Cornford_а с пересылкой stage в ипортированный класс. |
Часовой пояс GMT +4, время: 01:59. |
|
« Предыдущая тема | Следующая тема » |
|
|