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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 22.02.2007, 13:54
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 11  
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
> import в AS3 работает именно как импорт, т.е. зашивает всё-таки классы.

Враньё он делает их видимыми ничего он не зашивает. проверял. неиспользуемые классы он не зашивал.

>> (зачем такая сложность?)
>этот вопрос меня тоже беспокоит

тут всё проще у тя могут быть 2 класса с одинаковыми названиями, в разных пакетах. Практика конечно плохая, но впринципе может быть такая ситуация.

Старый 24.02.2007, 08:49
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 12  
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Цитата:
этот вопрос меня тоже беспокоит теоретически Flash мог бы и сам найти нужные классы. Может для порядку? Как, например, ввели обязательно писать override при переопределении метода класса, чтобы случайно не заменить уже существующий. Так возможно и здесь, если ты не написал import а пытаешься использовать класс, так может это просто опечатка в имени класса?
По моему все логично, очень часто при разработке приложений используются third party компоненты\библиотеки, или банально куча разработчкиков (сейчас в проекте который я делаю, их несколько десятков).

И случаются совпадения в именах классах, можно конечно переименовать, но зачем придумывать глупые префиксы\постфиксы когда можно просто написать импорт.

Хотя фасадным* классам, конечно стоит пытатся всегда придумывать уникальные имена. С утилитарными\внутреними классами фасады можно не церемонится.

*Фасадный класс - объединяющий интерфейс нескольких классов для централизованного доступа, получается этакая инкапсуляция пакета или даже целой библиотеки.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 20.07.2007, 16:18
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 13  
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
поидее пакет package может содержать в себе несколько классов, однако у меня что то не получилось. Я пытаюсь делать так:

есть text.fla и там в Document class прописываю parseXML

содержимое parseXML.as:
Код:
package { 
     import flash.display.MovieClip; 
     import flash.events.*; 

     public class parseXML extends MovieClip {

public function parseXML () {
trace ("привет");
}
}
class ListItem {
public function ListItem () {
trace ("хай!");
}
}
выдаёт ошибку
5006: An ActionScript file can not have more than one externally visible definition: parseXML, ListItem

как правильно делать?

Старый 20.07.2007, 16:43
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 14  
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Один файл не может содержать два (и более) публичных класса.
Т.е. вообще несколько классов в один файл записать можно.
Но из-за пределов файла должен быть видим только один.

Вариант 1. Каждый класс - в отдельный файл.
Это если обязательно надо сделать два или более публичных классов.

Вариант 2. Одному классу пишешь public, всем остальным - private
Это если дополнительные классы нужны только для внутренней реализации и никому больше знать про них не надо.


В твоём случае, насколько я понимаю, лучше первый вариант, так как ты наверняка захочешь обратиться ListItem где-то ещё.

Старый 20.07.2007, 16:45
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 15  
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
См. директиву internal.

Старый 20.07.2007, 17:02
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 16  
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
пытаюсь делать как вы советуете - но что то не получается. Вот 2 способа в одном

test.fla = пишу "Parse"

содержимое Parse.as:
Код:
package { 
	import flash.display.*;
	//import flash.events.*;
	//import flash.net.*;
	//import flash.text.*;
	
	import ListItem;
	
	public class Parse extends MovieClip {
		public function Parse() {
			var vv:ListItem = new ListItem();
		}
	}
	private class Item {
		public function Item () {
			trace ("хай!");
		}
	}
}
содержимое ListItem.as:
Код:
package { 
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	
	public class ListItem extends MovieClip {
		public function ListItem () {
			trace ("класс подцепился");
			// создаю текстфилд
			var formatter:TextFormat	= new TextFormat();
			formatter.font		= "Comic Sans MS";
			formatter.size		= 14;
				
			var field:TextField		= new TextField();
			field.selectable		= false;
			field.embedFonts		= true;			
			field.defaultTextFormat	= formatter;
			field.setTextFormat(formatter);
			field.text			= "Matchiupichiu66666666666";
			field.autoSize		= TextFieldAutoSize.LEFT;
			field.x = 10;
			field.y = 10;
			addChild(field);
			trace (field);
		}
	}
}
в первом документе ругается на
Код:
	private class Item {
		public function Item () {
			trace ("хай!");
		}
	}
и пишет
1013: The private attribute may be used only on class property definitions.

если его закоментировать то ругаться перестаёт и вроде даже как цепляет второй класс.. однако текстфилд почему то не создаётся Ой т.е. текстфилд создаётся но я его не вижу почему то.


Последний раз редактировалось DRAGOnoid; 20.07.2007 в 17:08.
Старый 20.07.2007, 17:13
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 17  
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
такс, вторую ошибку решил - надо было просто догадаться передавать место куда addChild делать . Что-то типа этого

Код:
var vv:ListItem = new ListItem(this);

package { 
	import flash.display.*;
	import flash.text.*;
	
	public class ListItem extends MovieClip {
		public function ListItem (mc) {
---------------------\\-------------------
			mc.addChild(field);
		}
	}
}
но второй класс в общий пакет так и не получилось вставить

Старый 24.07.2007, 12:42
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 18  
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
решил проблему сам. просто надо было внимательней смотреть на пример
http://flasher.ru/forum/showpost.php...17&postcount=8

есть пакет есть главный класс в этом пакете.. ОСТАЛЬНЫЕ КЛАССЫ ПИСАТЬ ВНЕ ПАКЕТА! (т.е. после "package {}") - вот в чём я стормозил... =)

Старый 24.07.2007, 13:37
DRAGOnoid вне форума Посмотреть профиль Отправить личное сообщение для DRAGOnoid Посетить домашнюю страницу DRAGOnoid Найти все сообщения от DRAGOnoid
  № 19  
DRAGOnoid
 
Аватар для DRAGOnoid

Регистрация: Jan 2004
Адрес: Moscow
Сообщений: 389
Отправить сообщение для DRAGOnoid с помощью ICQ
подскажите пожалуйста если кто может ещё такую вещь, или совет дайте. А то совсем запутался.
Я хочу сделать свой класс прелоадер например и програмно в нём рисовать все элемнты, загрузку, текст и т.д.

так вот, я хотелбы сделать свой класс похожий на MovieClip, то есть чтобы можно было менять координаты, давать ссылки , но не как обычно вызовом метода а напрямую. Это возможно?

Код:
package { 
	import flash.display.*;	
	public class Parse extends MovieClip {
		public function Parse() {
			var mc:Item = new Item();
			addChild(mc);
			mc.x=100;
		}
	}
}
class Item {
	import flash.display.*;
	
	private var size:uint         = 80;
	private var bgColor:uint      = 0xFFCC00;
	private var borderColor:uint  = 0x666666;
	private var borderSize:uint   = 0;
	private var cornerRadius:uint = 9;
	private var gutter:uint       = 5;		
	public function Item ():MovieClip {//:void
		trace ("хай!");
		var mc = doDrawCircle();
		return mc;
	}
	// просто рисую круг (взят из примера)
	private function doDrawCircle():MovieClip {
		var mc:MovieClip	= new MovieClip();
		var halfSize:uint	= Math.round(size / 2);
		var child:Shape		= new Shape();		
		child.graphics.beginFill(bgColor);
		child.graphics.lineStyle(borderSize, borderColor);
		child.graphics.drawCircle(halfSize, halfSize, halfSize);
		child.graphics.endFill();
		mc.addChild(child);
		return mc;
	}
}
но при попытке написать public function Item ():MovieClip { выдаёт ошибку 1130: A constructor cannot specify a return type.. Почему?

Старый 24.07.2007, 13:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Конструктор класса не есть метод, возвращающий чего-либо.
Что помешало наследовать Item от MovieClip и рисовать всякую ботву прям в конструкторе?

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

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

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


 


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


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