![]() |
|
||||||||||
|
|||||
|
стервочка (я мужик)
|
> import в AS3 работает именно как импорт, т.е. зашивает всё-таки классы.
Враньё он делает их видимыми ничего он не зашивает. проверял. неиспользуемые классы он не зашивал.>> (зачем такая сложность?) >этот вопрос меня тоже беспокоит тут всё проще у тя могут быть 2 класса с одинаковыми названиями, в разных пакетах. Практика конечно плохая, но впринципе может быть такая ситуация. |
|
|||||
|
4AM Games
|
Цитата:
И случаются совпадения в именах классах, можно конечно переименовать, но зачем придумывать глупые префиксы\постфиксы когда можно просто написать импорт. Хотя фасадным* классам, конечно стоит пытатся всегда придумывать уникальные имена. С утилитарными\внутреними классами фасады можно не церемонится. *Фасадный класс - объединяющий интерфейс нескольких классов для централизованного доступа, получается этакая инкапсуляция пакета или даже целой библиотеки.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
поидее пакет 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 как правильно делать? |
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
Один файл не может содержать два (и более) публичных класса.
Т.е. вообще несколько классов в один файл записать можно. Но из-за пределов файла должен быть видим только один. Вариант 1. Каждый класс - в отдельный файл. Это если обязательно надо сделать два или более публичных классов. Вариант 2. Одному классу пишешь public, всем остальным - private Это если дополнительные классы нужны только для внутренней реализации и никому больше знать про них не надо. В твоём случае, насколько я понимаю, лучше первый вариант, так как ты наверняка захочешь обратиться ListItem где-то ещё. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
См. директиву internal.
|
|
|||||
|
пытаюсь делать как вы советуете - но что то не получается. Вот 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 ("хай!");
}
}
}
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);
}
}
}
и пишет 1013: The private attribute may be used only on class property definitions. если его закоментировать то ругаться перестаёт и вроде даже как цепляет второй класс.. однако текстфилд почему то не создаётся Ой т.е. текстфилд создаётся но я его не вижу почему то.Последний раз редактировалось DRAGOnoid; 20.07.2007 в 17:08. |
|
|||||
|
такс, вторую ошибку решил - надо было просто догадаться передавать место куда 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);
}
}
}
![]() |
|
|||||
|
решил проблему сам. просто надо было внимательней смотреть на пример
http://flasher.ru/forum/showpost.php...17&postcount=8 есть пакет есть главный класс в этом пакете.. ОСТАЛЬНЫЕ КЛАССЫ ПИСАТЬ ВНЕ ПАКЕТА! (т.е. после "package {}") - вот в чём я стормозил... =) |
|
|||||
|
подскажите пожалуйста если кто может ещё такую вещь, или совет дайте. А то совсем запутался.
Я хочу сделать свой класс прелоадер например и програмно в нём рисовать все элемнты, загрузку, текст и т.д. так вот, я хотелбы сделать свой класс похожий на 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;
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Конструктор класса не есть метод, возвращающий чего-либо.
Что помешало наследовать Item от MovieClip и рисовать всякую ботву прям в конструкторе? |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|