|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
АddChild: инициализация неосновного субкласса
Хм, вроде бы простая вещь, но чего-то я недогоняю.
Есть основной класс: package { import flash.display.*; import flash.text.*; import flash.events.*; public class Main extends Sprite { public var TextInitter:TextInit; public function Main() { TextInitter = new TextInit(); } } } package { import flash.display.*; import flash.text.*; import flash.events.*; public class TextInit extends TextField { public function TextInit() { trace("TextInit instance created!"); this.text = "MouseClick"; this.x = 50; this.y = 50; this.selectable = false; this.autoSize = TextFieldAutoSize.LEFT; addChild(this); } } } Цитата:
Цитата:
P.S. Я понимаю, что можно в основном классе написать addChild(TextInitter); и тогда всё просто, но это уже другой подход. |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Цитата:
Вы пытаетесь положить лист бумаги в самого себя. Все визуальные объекты на экране располагаются, как в матрешка в матрешке. Да и TextField не является DisplayObjectContainer-ом и у него нет метода addChild об этом Вам и пытается сказать компилятор. Последний раз редактировалось belv; 09.08.2013 в 12:51. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
ТекстФилд — закрытый контейнер. У него НЕТ метода addChild(), о чем красноречиво написано в тексте ошибки.
Цитата:
2) У this свойство stage появится ТОЛЬКО ПОСЛЕ добавления this в Список Отображения. Цитата:
pS Я уже просил Вас перестать называть переменные с большой буквы?
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
belv, Хм, просто, я хотел сделать заготовку для прдыдущей программки обрабатывающей нажатие.
И хотел сделать чтобы в конструкторе основного класса просто было: И при инициализации обоих субклассов уже была готовая программа : ) Насчет TextField понял. Но ведь можно пронаследовать и от Sprite, нет? Цитата:
Могу предположить, что наверное нужно просто грамотно юзать AddChild и тогда в этом не будет необходимости. Насчет второго пункта не знал, спасибо. Насчет больших буков : ) да, было такое. В данном случае, я наверное так сделал потому, что имена то классов у нас же в кэмэл-кэйзе, и с большой буквы. Ну и вроде как почему-бы именам экземпляров не быть такими же. P.S. По поводу единcтвенно-верности, а разве нельзя вот так: тогда AddChild метод будет существовать, и можно будет финт провернуть используя внутреннюю переменную типа TextField. |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Вы наследуете от TextField, чтобы Ваш объект обладал всеми свойствами TextField.Если вы унаследуете от Sprite, то Ваш TextInit будет обладать всеми свойствами Sprite.И все равно нельзя положить самого в себя, хоть у него и будет метод addChild().Добавьте в свой класс TextInit слушатель события на клик мыши и пусть он там себе живет спокойно, не надо придумывать
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
belv, Не совсем понимаю что вы имеете ввиду.
Ну вот например если класс TextInit сделать таким: package { import flash.display.*; import flash.text.*; import flash.events.*; public class TextInit extends TextField { public var mouseInitter = new MouseInit(); // private var clickCounter:uint = 0; public function TextInit() { trace("TextInit instance created!"); this.text = "MouseClick"; this.x = 50; this.y = 50; this.selectable = false; this.autoSize = TextFieldAutoSize.LEFT; this.addEventListener(MouseEvent.CLICK, clickTrigger); } // private function clickTrigger(e:MouseEvent) // { // clickCounter ++; // this.text = "MouseClick: triggered " + String(clickCounter) + " times"; // } } } this.addEventListener(MouseEvent.CLICK, mouseInitter.clickTrigger); this.addEventListener(MouseEvent.CLICK, mouseInitter.clickTrigger()); this.addEventListener(MouseEvent.CLICK, MouseInit.clickTrigger); Но кстати, если убрать камменты в этом классе, и отказаться вообще от класса Мыши, то всё работает. Однако, интересно было бы научится вызывать метод из другого класса. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Я рекомендовал Вам сделать так
package { import flash.display.*; import flash.text.*; import flash.events.*; public class Main extends Sprite { public var textInitter:TextInit; public function Main() { textInitter = new TextInit(); addChild(textInitter); } } } package { import flash.text.*; import flash.events.*; public class TextInit extends TextField { private var clickCounter:uint = 0; public function TextInit() { trace("TextInit instance created!"); this.text = "MouseClick"; this.x = 50; this.y = 50; this.selectable = false; this.autoSize = TextFieldAutoSize.LEFT; this.addEventListener(MouseEvent.CLICK, clickTrigger); } private function clickTrigger(e:MouseEvent):void { clickCounter ++; this.text = "MouseClick: triggered " + String(clickCounter) + " times"; } } } |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Wolsh, не совсем понимаю что такое контэйнер, это что-то абстрактное, или конкретный класс?
Вот если посмотреть на картинку Мука: То, вроде как получается что (Торможу, Stage на картинке есть отдельно, пардон). Но всё еще интересно где, опираясь на эту картинку, находится мой документ-класс-контэйнер, или опять же тут нельзя прямо строить параллели. Последний раз редактировалось Fogflasher; 09.08.2013 в 14:53. |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
belv, Ну да, ясно, то есть двухклассовое решение.
И всё-таки, остается непроясненным, можно как-то обратится из класса TextInit в отдельный класс MouseInit через слушатель? Может в данной ситуации это вообще невозможно. Ну или в лучшем случае, сопряжено с чем-то, о чем пока мне лучше не знать ))) |
Часовой пояс GMT +4, время: 12:51. |
|
« Предыдущая тема | Следующая тема » |
Теги |
addChild , new() , stage , textfield |
|
|