![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Вот начал разбираться как писать в AS3 через классы в FlashDevelop, а то раньше в Adobe Flash CS6 в кадрах кодил только. Хочу понять, как через класс создать текстовое поле и вывести на экран.
Код основного класса (там карнинки ещё выставил на сцену, слава Богу удачно, ибо подсказали как): package { import flash.events.*; import flash.display.*; import flash.text.*; import classes.TextF; /** * ... * @author Scorpion */ public class Main extends Sprite { [Embed(source = "../img/background.png")] public var BackgroundImage: Class; [Embed(source = "../img/head.png")] public var HeadImage: Class; [Embed(source = "../img/menuline.png")] public var MenulineImage: Class; public function Main() { if (stage) start(); else addEventListener(Event.ADDED_TO_STAGE, start); } private function start(): void { var backgroundImg: Bitmap = new BackgroundImage(); backgroundImg.x = 0; backgroundImg.y = 0; addChild(backgroundImg); var headImg: Bitmap = new HeadImage(); headImg.x = 0; headImg.y = 0; addChild(headImg); var menuline: Bitmap = new MenulineImage(); menuline.x = 0; menuline.y = 200; addChild(menuline); var Text1: TextF = new TextF; Text1.TextAdd(); addChild(Text1); } } } package classes { import flash.events.*; import flash.display.*; import flash.text.*; /** * ... * @author Scorpion */ public class TextF { public function TextAdd(): void { var Text: TextField = new TextField; Text.text = "Hello"; Text.x = 0; Text.y = 0; } } } Прописать создание текстового поля в основном классе то я умею, вот хочу научится делать это через классы, по этому прошу объяснить как правильно было бы отредактировать данных код. |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 43
|
addChild принимает только классы, унаследованные от DisplayObject. Ваш TextF вообще не от чего не унаследован. Так в TextF текстовое поле не добавляется на сцену, просто создается и всё
__________________
На самом деле самого дела нет. В самой деятельности заключена самость дела - и наоборот. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
А как тогда сделать, чтобы добавлялось и наследовалось как надо?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
С большой буквы в AS3 называются только классы.
__________________
Reality.getBounds(this); |
|
|||||
|
Согласно конвенциям
Цитата:
Потом, с фигурными скобками у вас бардак. Закрывающая скобка метода должна быть на уровне начала метода. А вообще для читабельности советую переносить фигурную скобку на новую строку. public function textAdd():void { var text: TextField = new TextField(); text.text = "Hello"; text.x = 0; text.y = 0; } Далее menuline - если это английский язык, то это 2 слова, соответственно второе слово должно начинаться с заглавной буквы. menuLine. Далее - наименования классов. TextF - что это за бред? Ну и самое главное. Имена переменных должны начинаться с строчной буквы. Добавлено через 5 минут Ну и здесь то же самое И ещё называние переменных типо text1 или text никуда не годится. Добавлено через 11 минут Ну и в конце хочу добавить, что лучше использовать относительное позиционирование, чем абсолютное. Добавлено через 12 минут И здесь Соблюдать отступы: Добавлено через 20 минут Сюда же наименование пакетов.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 02.05.2014 в 03:21. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Спасибо ... но как таки мне добавить из класса текстовое поле в основной класс?
|
|
|||||
|
Вам же чётко и ясно ответили...
И вы его не в основной класс добавляете по иерархии, а в класс TextF.
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Внес эти правки, все работает, спасибо.
Цитата:
Выходит, что addChild надо прописывать два раза? И в пользовательском классе, и в основном? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
У Вас есть сумка, банка и огурец. Если огурец поместить в банку, а банку поместить в сумку, то и огурец окажется в сумке.
Но если Вы не поместили его в банку, а просто держите в руке, то с какого перепугу он должен оказаться в сумке? Если Вы поместили огурец в банку, но банку не поставили в сумку, то с какого перепугу огурец окажется в сумке? Почитайте уже хоть что-нибудь про Список Отображения, контейнеры и т.п. Это же основа основ. Краткий ликбез: Есть объекты дисплейные (ДО) и не дисплейные — те, которые отображаются на экране и те, которые просто существуют и работают в памяти, "за кадром". Все дисплейные объекты делятся на "контейнеры" (Sprite, MovieClip, Loader, Stage) и конечные (Shape, TextField, Bitmap, SimpleButton и др.). В контейнеры (ДОК) можно добавлять "детей" методом addChild(), в конечные ничего добавить нельзя. Самый главный контейнер — объект Stage — представляет окно отображения плеера. Он всегда один. В него автоматически(!) добавляется объект Документ-класса, попадая таким образом в область отображения. Все остальные ДО будут отображаться только в том случае, если они находятся в отображении (являются детьми) других контейнеров и эта цепочка доходит до Документ-класса и, соответственно, стейджа, то есть окна плеера. Объекты, в том числе ДО и ДОК, могут существовать в памяти, но при этом не отображаться — если не находятся в списке отображения стейджа. Список отображения можете представить как папку в Проводнике: есть "системный диск" Stage, в нем папка Main, а в ней могут быть другие папки (ДОК) и файлы (ДО). Но всё, что не находится на этом диске, не отображается. Поэтому после создания объект нужно обязательно поместить в какую-нибудь папку, входящую в Мейн, или в сам Мейн.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 02.05.2014 в 12:10. |
|
|||||
|
Wolsh забыл упомянуть, что такое ДО и ДОК.
DO - DisplayObject. Наследники этого класса(а именно классы Bitmap, TextField, и так далее) могут быть переданы в метод addChild() и добавлены в список отображения. DOC - DisplayObjectContainer. Наследники этого класса(Sprite, MovieClip, и т.д, выше написано) могут быть переданы в метод addChild() и наследуют метод addChild(), который позволяет добавить какой-то другой DisplayObject или DisplayObjectContainer в себя, тоесть чтобы текстовое поле появилось на сцене в контейнере TextF, нужно его добавить сначала в список отображения(Display List) этого контейнера, а потом уже добавить сам контейнер в список отображения Main(Main добавляется на сцену автоматически и при запуске конструктора Main он уже добавлен на сцену).
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 02.05.2014 в 13:33. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|