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

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

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

Регистрация: Apr 2014
Сообщений: 97
По умолчанию Создание текстового поля через класс

Вот начал разбираться как писать в AS3 через классы в FlashDevelop, а то раньше в Adobe Flash CS6 в кадрах кодил только. Хочу понять, как через класс создать текстовое поле и вывести на экран.

Код основного класса (там карнинки ещё выставил на сцену, слава Богу удачно, ибо подсказали как):
Код AS3:
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);
		}
	}
}
А вот мой класс с текстовый полем:
Код AS3:
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;
		}
    } 
}
Ошибка компилятора на строке с addChild(Text1) в основном классе возникает.
Прописать создание текстового поля в основном классе то я умею, вот хочу научится делать это через классы, по этому прошу объяснить как правильно было бы отредактировать данных код.

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

Регистрация: Nov 2008
Сообщений: 43
addChild принимает только классы, унаследованные от DisplayObject. Ваш TextF вообще не от чего не унаследован. Так в TextF текстовое поле не добавляется на сцену, просто создается и всё
__________________
На самом деле самого дела нет. В самой деятельности заключена самость дела - и наоборот.

Старый 02.05.2014, 02:29
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 3  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
А как тогда сделать, чтобы добавлялось и наследовалось как надо?

Старый 02.05.2014, 03:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
public class TextF extends Sprite {
Код AS3:
var Text: TextField = new TextField();
addChild(Text);
С большой буквы в AS3 называются только классы.
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Согласно конвенциям
Цитата:
var Text: TextField = new TextField();
TextAdd() -> textAdd()
Потом, с фигурными скобками у вас бардак.
Закрывающая скобка метода должна быть на уровне начала метода.
А вообще для читабельности советую переносить фигурную скобку на новую строку.
Код AS3:
public function textAdd():void 
{
	var text: TextField = new TextField();
	text.text = "Hello";
	text.x = 0;
	text.y = 0;
}
Потом, согласно тем же конвенциям, start() -> init().
Далее
menuline - если это английский язык, то это 2 слова, соответственно второе слово должно начинаться с заглавной буквы.
menuLine.
Далее - наименования классов.
TextF - что это за бред?
Ну и самое главное.
Код AS3:
Text1
Код AS3:
Text
Имена переменных должны начинаться с строчной буквы.

Добавлено через 5 минут
Ну и здесь то же самое
MenulineImage -> MenuLineImage

И ещё называние переменных типо text1 или text никуда не годится.

Добавлено через 11 минут
Ну и в конце хочу добавить, что лучше использовать относительное позиционирование, чем абсолютное.

Добавлено через 12 минут
И здесь
Код AS3:
if (stage) 
start();
else
addEventListener(Event.ADDED_TO_STAGE, start);
Соблюдать отступы:
Код AS3:
if (stage) 
	start();
else
	addEventListener(Event.ADDED_TO_STAGE, start);
Добавлено через 20 минут
Сюда же наименование пакетов.
classes - полный фейл.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 02.05.2014 в 03:21.
Старый 02.05.2014, 03:41
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 6  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
Спасибо ... но как таки мне добавить из класса текстовое поле в основной класс?

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Вам же чётко и ясно ответили...
Код AS3:
public class TextF extends Sprite {
Код AS3:
var Text: TextField = new TextField();
addChild(Text);
И вы его не в основной класс добавляете по иерархии, а в класс TextF.
__________________
There is no thing in this world that is not simple.

Старый 02.05.2014, 04:25
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 8  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
Внес эти правки, все работает, спасибо.

Цитата:
И вы его не в основной класс добавляете по иерархии, а в класс TextF.
Что добавляю?

Выходит, что addChild надо прописывать два раза? И в пользовательском классе, и в основном?

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

модератор форума
Регистрация: 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.
Старый 02.05.2014, 12:53
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 10  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
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, время: 12:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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