PDA

Просмотр полной версии : Class'ы их создание и работа с ними


D12
31.10.2007, 19:30
Прошу обьясните мне на простых примерах как они создаются, как ими управлять, что можно с их помощью создовать

CrazyFlasher
31.10.2007, 20:06
вам для начала лучше поискать общую лит-ру про ООП..не важно, AS, не AS...просто чтобы понять саму суть

udaaff
31.10.2007, 20:17
Советую Мука почитать. Основы ActionScript 2.0 (http://www.likbez.by/product_39483.html)

Fl00r
31.10.2007, 20:21
Честно говоря ну прочитал я Мука. И остался в еще большем недоумении. Когда начал сам что-то писать - стало легче. Когда Nirth угрожал расстрелом за нечеловеческий код, то я совсем просветлел и понял, что такое конструктор, метод и фигурные скобочки в loop actions =).
Юмор юмором, но для меня лучшая школа - практическая.
Но помочь D12 не смогу, так как не считаю себя компетентным человеком в вопросах ООП.

udaaff, напугал по началу =) Цена: 36080 руб.

wvxvw
31.10.2007, 20:30
class DemoClass {
public static function main() {
var my_txt:TextField = _root.createTextField("my_txt", 1, 100, 100, 300, 100);
my_txt.multiline = true;
my_txt.wordWrap = true;
var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xFF0000;
my_fmt.underline = true;
my_txt.text = "This is my first test field object text.";
my_txt.setTextFormat(my_fmt);
}
}
//------- calling the function somewhere furthe in the code ----//
// DemoClass.main();
//--------------------------------------------------------------//
Это что касается твоего кода. Лучше задавай конкретные вопросы - на них легче овечать =)

D12
31.10.2007, 21:17
Хорошо :)
Как её с места столкнуть ?
class Star extends MovieClip {
//
var Go:Number = 3;
//
function Star() {
var star:MovieClip = _root.createEmptyMovieClip("star", star.getNextHighestDepth());
star.beginFill(0xFFFFFF);
star.moveTo(-5, -1);
star.lineTo(-5, -1);
star.lineTo(5, -1);
star.lineTo(5, 1);
star.lineTo(-5, 1);
star.endFill();
star.endFill();
star._x = 275;
star._y = 200;
star._alpha = 100;
}
//
public function onEnterFrame():Void {
_root.star._y += Go;
}
//
}

udaaff
31.10.2007, 21:25
Класс, расширяющий мувик, надо связывать с символом мувика в библиотеке.
class Star extends MovieClip {

private var _go:Number
private var _i:Number
// если массив явл. константой, то можно и тут ему значение присвоить,
// если же значение массива будет меняться runtime, то надо значение
// присваивать в конструкторе или в onLoad
private var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];
//
public function onLoad():Void {
// инициализация начальных свойств
_go = 3;
_i = 0;
__drawStar;
}

private function __drawStar():Void{
// выражения
}

public function onEnterFrame():Void {
// выражения
}
}

D12
31.10.2007, 21:34
Программно в классе можно рисовать ?

udaaff
31.10.2007, 21:50
//в кадре
//var mc = attachMovie("id", "mc", getNextHighestDepth(), {w: 100, h: 50})

class Star extends MovieClip {

private var _w:Number
private var _h:Number

public function onLoad():Void {
__drawRect(_w, _h);
}

private function __drawRect(w:Number, h:Number):Void{
beginFill(0x00FF00);
lineStyle(0);
lineTo(w, 0);
lineTo(w, h);
lineTo(0, h);
lineTo(0, 0);
endFill();
}

public function set w (value:Number):Void {
_w = value;
}

public function set h (value:Number):Void {
_h = value;
}
}

D12
31.10.2007, 21:59
теперь к полученному результату можно дополнить подобное действие ?
_x += 1;

Нарисованный программно в классе обьект можно ли в этом же классе позиционировать, или может нужен еще для этого класс ?

D12
31.10.2007, 23:03
Эх... =) вас трудно понять :) то спорите за кадры, а тут выходит что-бы работал класс на главной сцене (.fla) должен находится клип созданный не программно с указанием в lingage имени нужного класса, для того что бы спихнуть созданный к примеру выше в классе програмно какой небудь обьект, я правильно понял :)

P.S. Мазахисты :)
Прорвёмся ...

wvxvw
31.10.2007, 23:19
Класс, расширяющий мувик, надо связывать с символом
Не учи людей нехорошему... нормальный способ - создавать клипы внутри класса, а не присваивать класс зааттаченому мувику...
С наследованием от МувиКлипа есть определенные неприятности - тут же на этой странице есть тема... у человека вполне нормальный код не компилися из за этого.
class MyClass {
//---------- var declaration -------//
private var __mc:MovieClip;
//---------- constructor -----------//
function MyClass(mc:MovieClip){
__mc = mc.createEmptyMovieClip("__mc",mc.getNextHighestDepth());
__mc.beginFill(0,100);
__mc.moveTo(0,0);
__mc.lineTo(100,0);
__mc.lineTo(100,100);
__mc.lineTo(0,100);
__mc.lineTo(0,0);
__mc.endFill();
}
//-------- get/set props --------//
public function set x(n:Number){
__mc._x = n;
}
public function get x():Number {
return __mc._x;
}
}
И делайте со своим клипом что хотите, создавайте где угодно и т.д.

Поправил, сорри, опечатался

udaaff
31.10.2007, 23:30
Не учи людей нехорошему... нормальный способ - создавать клипы внутри класса, а не присваивать класс зааттаченому мувику...
Раз уж такие заявления делаете, объясняете почему. Я лично считаю ваш способ ненормальным. И, если класс наследуется от муклипа, его всегда нужно с симоволом связывать.

D12
31.10.2007, 23:34
Пример выше неработает =(

etc
31.10.2007, 23:34
udaaff, тотальное наследование от MovieClip не есть хорошая практика. Создавать клипы в классы — хорошо, только делать это нужно так, как написал wvxvw и нужно обязательно забыть, что существует клип _root.

D12
31.10.2007, 23:58
При попытке запуска выше стоящего класса, вообщем вот:

20: Instance variables cannot be accessed in static functions.
return __mc._x;

Total ActionScript Errors: 1 Reported Errors: 1

etc
01.11.2007, 00:04
Надо убрать static из геттера.

D12
01.11.2007, 00:15
Это конечно понятно, но ничего непроисходит и при этом нет ошибки :(

udaaff
01.11.2007, 01:22
udaaff, тотальное наследование от MovieClip не есть хорошая практика. Создавать клипы в классы — хорошо, только делать это нужно так, как написал wvxvw и нужно обязательно забыть, что существует клип _root.
А какой смысл в тотальном применении композиции для создания мувика? И что преступного в моем примере, я так и не понял.

D12
01.11.2007, 01:37
1:0 пока версия пользователя Udaaff работаспособна но увы не юзабельная в маштабах.
Тем немение версия пользователя Wvxvw вселяет надежду, в сети натыкаюсь на весьма похожие мысли, правда у них работает, у меня неполучается :)

udaaff
01.11.2007, 01:49
К примеру, в кадре:
new MyClass(mc) // В качестве параметра мувик передаешь.

etc
01.11.2007, 01:56
А какой смысл в тотальном применении композиции для создания мувика? И что преступного в моем примере, я так и не понял.
Визуальные элементы не должны содержать в себе логику. Принцип отделения визуальной информации от логической.

lowka
01.11.2007, 02:21
А какой смысл в тотальном применении композиции для создания мувика?
Можно спокойно переопределять нужные свойства. С MovieClip-ом все несколько сложнее (не сложнее, а просто тупее).

D12
01.11.2007, 02:50
Что могу сказать, сегодня я размазался об эту стену...
судя по всему классы мне не рады...
но нужно учиться...:)

Что у меня есть на данный момент:
вот коробочка все рисуется все хорошо, код в .as файле
class Star {
static function create(Obj:Object):Void {
var char:MovieClip = Obj.targ.createEmptyMovieClip("box", Obj.targ.getNextHighestDepth());
char.beginFill(0xFFFFFF);
char.moveTo(-50, -10);
char.lineTo(-50, -10);
char.lineTo(50, -10);
char.lineTo(50, 10);
char.lineTo(-50, 10);
char.endFill();
char._x=200, char._y=200;
}
}


далее стена, немогу я сдвинуть эту коробочку с места :eek:
класс на движение .as файл
class Go {
public var n:Number = 200;
function onEnterFrame():Void {
_root.mc._x += 1;
}
//public function set x(n:Number) {
//_root.mc._x = n;
//}
//public function get x():Number {
//return _root.mc._x;
//}
}

код в .fla файле
var __go:Go = new Go();
import Star;
var Obj:Object = {};
Obj.targ = this.createEmptyMovieClip("mc", 0);
Star.create(Obj);
delete Obj;

Всё пошёл себя собирать сегодня классы меня разорвали:wacko:

Nirth
01.11.2007, 02:55
D12 заведи себе гугл талк, стукни меня на furzahad@gmail.com(писать сюда безсмысленно, я не проверяю эту почту она прото для IM)

Nirth
01.11.2007, 03:01
Визуальные элементы не должны содержать в себе логику. Принцип отделения визуальной информации от логической.
Ой только не надо, в SWING (один из самых крутых GUI фреймворков) Логика и Вид как раз сильно завязаны. в .NET Framework логика и вид завязаны в Flex Framework логика и вид завязаны в Cocoa(Mac OSX) логика и вид завязаны.

Update
кстати в Win32 логика и вид тоже завязаны.

Update
Единственная причина почему в ActionScript используеться композиция, это потому что так легче. Не нужно мучаться с фабриками и тд, Колин Мук пишет книжки для начинающих, именно поэтому он решил заюзать композицию, она менее багнутая. На деле подход с фабриками лично мне больше нравится.

wvxvw
01.11.2007, 03:52
2 udaaff:
Причина гораздо банальнее. В сторону все войны о том, как правильно, и как в теории синтезируется сферический конь в вакууме =)
Метод аттача и последующего объявления клипа объектом класса работает хреново. Факт, в том коде о котором я говорю была следующая неувязка: было 2 класса последовательно наследуемых от мувиКлипа, так вот второй почему-то по вызову конструктора суперкласса пытался обратится к клипу на сцене... Почему - надо спрашивать у Адоби =)

И мое сугубо личное мнение... 90% кода который пишется на флеше реализует элементы интерфейса. При чем, как правило проще и техничнее сразу же писать и контроллеры и их внешний вид, чем создавать десятки библиотек для того, чтобы в итоге сваять какой-нибудь комбо-бокс... Элементарно меньше работы, да и понятнее в итоге.

2 D12:
class Star {
static function _create(Obj:Object):MovieClip {
var char:MovieClip = Obj.targ.createEmptyMovieClip("box", Obj.targ.getNextHighestDepth());
char.beginFill(0xFF00FF);
char.moveTo(-50, -10);
char.lineTo(-50, -10);
char.lineTo(50, -10);
char.lineTo(50, 10);
char.lineTo(-50, 10);
char.endFill();
char._x=200, char._y=200;
return char;
}
static function _move(mc:MovieClip):Void {
mc.onEnterFrame = function():Void {
this._x++;
}
}
static function _stop(mc:MovieClip):Void {
delete mc.onEnterFrame;
}
}

var _mc:MovieClip = Star._create({targ:this});
Star._move(_mc);
setTimeout(Star._stop,1000,_mc);

немножко непонятно назначение такой конструкции, но в учебных целях покатит =)

Nirth
01.11.2007, 04:11
2 D12 не слушай wvxvw

2 wvxvw Без обид, и прошу прощение но мое имхо, это бред.

wvxvw
01.11.2007, 04:37
Код бредовый? Ну, я тут спорить не буду... я просто взял то, что было и слепил так, чтобы хоть что-то похожее делало =)
Я не думаю, что цель проекта заключается в том, чтобы двигать прямоугольник по экрану =) А чтобы просто посмотреть, а что получится, если сделать так.

А если бред - это то, что было написано до кода - ну, на то оно и ИМХО =)

ЗЫ. http://flasher.ru/forum/showthread.php?t=103055 вот тут этот пример, о котором я раньше говорил.

Nirth
01.11.2007, 04:44
Вот пример 18130.
Создается фабрика. Далее кажому классу наследнику TextField/MovieClip создаеться статический метод create (в моем случае был метод addChild который принимал в качестве параметра прототип или функцию-класс желаемого класса).


Код бредовый? Ну, я тут спорить не буду... я просто взял то, что было и слепил так, чтобы хоть что-то похожее делало =)
Я не думаю, что цель проекта заключается в том, чтобы двигать прямоугольник по экрану =) А чтобы просто посмотреть, а что получится, если сделать так.

А если бред - это то, что было написано до кода - ну, на то оно и ИМХО =)

ЗЫ. http://flasher.ru/forum/showthread.php?t=103055 вот тут этот пример, о котором я раньше говорил.
Угу, оно самое то что написано до кода имхо бред, поэтому и имхо.

terbooter
01.11.2007, 07:59
То есть фабрика это то же как у wvxvw, только добавляется строчка

result.__proto__ = generator.prototype;
generator.apply(result);

То есть мувик это объект суперкласса Object, но с помощью стандартного
new его не создать, поэтому создается статическая функция, которой передается ссылка и создается пустой мувик, а затем задается __proto__
и вызывается конструктор, то есть по сути те же действия выполняет new.

http://flasher.ru/forum/showthread.php?t=102420
http://flasher.ru/forum/showthread.php?t=79179

etc
01.11.2007, 08:06
Nirth, ну ооочень сильно напоминает мой McFactory :)

wvxvw
01.11.2007, 11:21
Эм... еще одна попытка создать UIObject? %) Мне оч понравилось объяснение в хелпе полезности этого класса =) Не дословно:
"в принципе этот класс не нужен, просто создан для удобства тех, кто привык программировать на чем-то отличном от АС" =)
Ну, я смогу придумать еще надцать череззаборногузадерических способово вызвать .createEmptyMovieClip() а толку? =)))

Nirth
01.11.2007, 12:19
Nirth, ну ооочень сильно напоминает мой McFactory
Этот код я увидел далеко в 2003 году. Он не мой вроде принадлежит руке Piter Hall'а. Хотя с тех пор изменялся раз десять. Это упрощенная версия.
Так же этот прием используеться в фреймворках AsStep, ASWing, Flex Framework 1.0, 1.5, Vegas. Это вообще единственный оптимальный способ создавать мувики, поэтому твое удивление совершенно напрасно=)))

etc
01.11.2007, 13:06
А я и не удивляюсь, собственно :)

CrazyFlasher
01.11.2007, 13:22
привязываение класса к клипу в библиотеке - порно (имхо)

udaaff
01.11.2007, 13:26
Объясните мне пожалуйста. Зачем мне использовать различные фабрики или способ wvxvw для создания мувика или текстового поля, если просто напросто можно создать пустой мувик в библиотеке и связать его с классом? Только потому, что в других языках все обстоит по другому?

upd: CrazyFlasher, почему порно?

CrazyFlasher
01.11.2007, 13:29
ну теряется логическая модель программы. это тоже самое, что писать код внутри клипа

udaaff
01.11.2007, 13:33
логическая модель находится в классе. И какова разница: или мы будем мувик создавать при помощи attachMovie или при помощи createEmtpyMovieClip и потом через фабрику его пропускать?

CrazyFlasher
01.11.2007, 13:36
программа должна быть единным целым, а не по кускам присобачена к клипам (имхо)

udaaff
01.11.2007, 13:40
Код находится в классе, он же не на кнопках написан =)

CrazyFlasher
01.11.2007, 13:44
ну всё равно...для меня не удобно...мне кажется лучше сделать, по простому говоря, главный класс, который будет создавать объекты других классов, навешивать им события и т.д. Так проще работать, переходить от одного класса к другому...гибкая навигация и ошибку легче найти (опять таки всё это имхо, и я не утверждаю, что это правильнее...просто мне так удобнее)

Nirth
01.11.2007, 13:49
Объясните мне пожалуйста. Зачем мне использовать различные фабрики или способ wvxvw для создания мувика или текстового поля, если просто напросто можно создать пустой мувик в библиотеке и связать его с классом? Только потому, что в других языках все обстоит по другому?
1) Классы по сути своей реюзабильны, тоесть при переносе классов из одного проекта в другой, нужно убедиться что все нужные пустые мувики существуют(а не нужных нету).
2) Чтобы не зависеть от FLA файла, и легко переходить на MTASC например(который компилирует раз в 50 быстрее флэша).

wvxvw
01.11.2007, 15:44
Объясните мне пожалуйста. Зачем мне использовать различные фабрики или способ wvxvw для создания мувика или текстового поля, если просто напросто можно создать пустой мувик в библиотеке и связать его с классом? Только потому, что в других языках все обстоит по другому?
А вот потому что я теперь ведущий (ну и замыкающий по совместительству) специалист =) И должен очень часто заниматься тем, что правлю чужие, а еще хуже доделываю/переделываю чьи-то творения перед тем, как их куда-то вывесить. И если заказов достаточно и работать не хочется (ну прям как сейчас, например %). То человека, который принесет мне ФЛА с парой-тройкой сотен лайбрари-айтемов, из которых несколько десятков экспортируются с привязкой к классу, и скажет, что у него что-то не работает... я просто элементарно откажусь этим заниматься - пусть идет и сам мучается с тем, что натворил. В больших проэктах этот способ не просто не удобный, он меганеудобный.

ЗЫ. Я тут ничего такого особенного не писал... какой-такой "мой" способ создания клипов? =)

Ostgur
01.11.2007, 16:10
а чем принципиально отличается класс от функции? нелегче написать кучу функций и также импортировать их?

CrazyFlasher
01.11.2007, 16:12
а чем принципиально отличается класс от функции? нелегче написать кучу функций и также импортировать их?
так многие утверждают, которые не хотят переходить на классы по тем или иным причинам...сам проходил через это...поверьте, не легче

D12
01.11.2007, 19:50
Наконецто в руках рабочий пример:yahoo: Wvxvw Спасибо
но радость была недолгай, гора высока а путь долгий...
можно попросить помочь разобратся шаг за шагом на данном этапе ?

Класс который рисует звёздочку:
class Star {
static function _create(Obj:Object):MovieClip {
//
var Width_Stage:Number = 550;
var Height_Stage:Number = 400;
var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];
//
var char:MovieClip = Obj.targ.createEmptyMovieClip("box", Obj.targ.getNextHighestDepth());
char.beginFill(COLOR_BOX[int(Math.random()*(COLOR_BOX.length-1))]);
char.moveTo(-5, -1);
char.lineTo(-5, -1);
char.lineTo(5, -1);
char.lineTo(5, 1);
char.lineTo(-5, 1);
char.endFill();
char._x=Width_Stage/2, char._y=Height_Stage/2;
return char;
}
}

Класс который приводит её в движение:
class Go {
static function _move(mc:MovieClip):Void {
//
var go:Number = 5+int(Math.random()*18);
var alf:Number = int(Math.random()*10);
var rad:Number = Math.PI/180;
var Rotation:Number = int(Math.random()*360);
//
mc.onEnterFrame = function():Void {
this._x += Math.cos(Rotation*rad)*go;
this._y += Math.sin(Rotation*rad)*go;
this._rotation = Rotation;
};
}
static function _stop(mc:MovieClip):Void {
delete mc.onEnterFrame;
}
}

Файл fr_star.as где следующий код:
import Star;
import Go;
var _mc:MovieClip = Star._create({targ:this});
Go._move(_mc);
setTimeout(Go._stop,12000,_mc);
Ну и на самой сцене в первом кадре:
#include "fr_star.as"

Эх... Для начала хотелось спросить, каким образом нужно правильно создовать переменные внутрение и общие :(
Можно ли создать класс "Go" таким что бы он работал для всех мувиклипов для которых его назначили независимо от их имён в нём самом:
что так работало:
Go._move(_mc1);
Go._move(_mc2);
Go._move(_mc3);

если нет то какие есть альтернативы?

Жуть а ведь говорили мне не лезь :wacko:
Но всё же увы отступать нельзя:umnik2:

Nirth
01.11.2007, 20:31
Ужоснах

wvxvw
02.11.2007, 00:23
Nirth:
Ну, млин. Человек что-то сделал, и это даже работает =)

D12:
Смотри... я как бы не думал, что ты будешь это копировать... Сорь, наверное не стоило меня слушать. Но я все равно попробую обьяснить =)

Создавать статические функции для твоей задачи - не лучшее решение. Ну, как бы это точно имеет мало общего с ООП. А вообще, лучше я напишу, как бы я это сделал, мб так будет понятнее, и проще обьяснить.
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
class Star {
private var __base:MovieClip;
private var __gfx:MovieClip;
private var __tw:Tween;
private static var __count:Number = 0;
function Star(mc:MovieClip){
__base = mc;
__draw();
__count++;
}
//------- private ---------//
private function __draw():Void {
__tw.stop();
__gfx.removeMovieClip();
__gfx = __base.createEmptyMovieClip("__gfx",__base.getNextHighestDepth());
__gfx.beginFill(0,100);
__gfx.moveTo(0,0);
__gfx.lineTo(100,0);
__gfx.lineTo(100,100);
__gfx.lineTo(0,100);
__gfx.lineTo(0,0);
__gfx.endFill();
}
//------- public -------------//
public function __move(from:Number,to:Number,sec:Number):Void {
__tw = new Tween(__gfx,"_x",Elastic.easeOut,from,to,sec,true);
}
public function __stop():Void {
__tw.stop();
}
//------------ get/set -------//
public function set x(n:Number):Void {
__gfx._x = n;
}
public function get x():Number {
return __gfx._x;
}
public function set y(n:Number):Void {
__gfx._y = n;
}
public function get y():Number {
return __gfx._y;
}
public function set w(n:Number):Void {
__gfx._width = n;
}
public function get w():Number {
return __gfx._width;
}
public function set h(n:Number):Void {
__gfx._height = n;
}
public function get h():Number {
return __gfx._height;
}
//-------- debugger --------//
public function toString():String {
return "[Star"+__count+"]";
}
}
var s:Star = new Star(this);
s.__move(10,300,10);
trace(s);
Вот. собственно, лучше создавать объекты с определенными свойствами, назовем их модулями, из которых потом при желании можно комбинировать более сложные конструкции. Возможно, мой код - не лучшая реализация двигающегося квадратика, но, как для примера, вполне должно подойти =) Я тут попытался показать, например, зачем может пригодится статическая переменная, но это опять же, скорее для наглядности, для реализации двигающегося квадратика и половины тут написанного не нужно =)

Nirth
02.11.2007, 00:47
Ну, млин. Человек что-то сделал, и это даже работает =)
Да не, у меня к нему притензий нету=) и я с тобой полностью согласен=)
Смотри... я как бы не думал, что ты будешь это копировать... Сорь, наверное не стоило меня слушать.
Блин был бы топик о АС3 я бы объяснил, а так даже редактора ас2 нету=)

CrazyFlasher
02.11.2007, 00:59
всмысле нету? а flash develop? или ты не о том?

Nirth
02.11.2007, 01:07
всмысле нету? а flash develop? или ты не о том?
У меня нету, и мне лень устанавливать.

CrazyFlasher
02.11.2007, 01:43
так а чё там устанавливать...скачать да и всё...очень удобная штука
www.flashdevelop.org

Nirth
02.11.2007, 02:52
CrazyFlasher я знаю, только она не идет под Mac OS X =)
Под Mac OS X есть редакторы AS2 но при всем моем уважении к d12 мне лень их скачивать, открывать сайты и тд =)

terbooter
02.11.2007, 08:41
так а чё там устанавливать...скачать да и всё...очень удобная штука
www.flashdevelop.org (http://www.flashdevelop.org)

Ага а потом скачать и установить NET 2.0 и JRE 1.6 -)

Если не сложно поделитесь опытом как его использовать
(ссылками ). А то мне пока флешевое окошко скриптов роднее всего -)))

to wvxvw, про UIObject не нашел такого в хелпе, это же вроде базовый класс для стандартных компонентов?

etc
02.11.2007, 10:33
FDT рулит и педалит :D

terbooter
02.11.2007, 12:07
Наверно, только 300$ нету

wvxvw
02.11.2007, 13:53
to wvxvw, про UIObject не нашел такого в хелпе, это же вроде базовый класс для стандартных компонентов?
Странно, вроде был... да, типа того. Ну, если считать стандартные = v.2 то базовый класс - это UIComponent, который наследуется от UIObject, который в свою очередь наследуется от MovieClip. Но это не мешает свои компоненты наследовать напрямую от MovieClip'а =) Вобщем-то, по большому счету, этот класс - не самая удачная попытка ММ "заставить" АС соответствовать требованиям ООП. (Несоответсвие заключалось в том, что нельзя создать клип с помощью оператора new).
Моя точка зрения по этому поводу отличается, от Nirth'а, например, в том, что я считаю этот класс избыточной структурой =) Но, ничего не поделаешь, програмирование в целом на любом языке стремится к определенной унификации и одинаковой логике, при этом часто жертвуя производительностью.

D12
02.11.2007, 19:00
Wvxvw спасибо за пример =)
Но мне бы хотелось делать по принцмпу разделяй и властвуй :)

D12
03.11.2007, 00:03
Урррааа:yahoo: Заработало :victory:

Так класс звезда :
class Star {
public static var Width_Stage:Number = 550;
public static var Height_Stage:Number = 400;
private static var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];
//
static function _create(Obj:Object):MovieClip {
var char:MovieClip = Obj.targ.createEmptyMovieClip("box", Obj.targ.getNextHighestDepth());
char.beginFill(COLOR_BOX[int(Math.random()*(COLOR_BOX.length-1))]);
char.moveTo(-5, -1);
char.lineTo(-5, -1);
char.lineTo(5, -1);
char.lineTo(5, 1);
char.lineTo(-5, 1);
char.endFill();
char._x=Width_Stage/2, char._y=Height_Stage/2;
return char;
}
}

Класс дающий движение :
class Go {
public static var rad:Number = Math.PI/180;
//
private static var go:Number = 5+int(Math.random()*18);
private static var alf:Number = int(Math.random()*10);
private static var Rotation:Number = int(Math.random()*360);
//
static function _move(mc:MovieClip):Void {
mc.onEnterFrame = function():Void {
this._x += Math.cos(Rotation*rad)*go;
this._y += Math.sin(Rotation*rad)*go;
this._rotation = Rotation;
};
}
static function _stop(mc:MovieClip):Void {
delete mc.onEnterFrame;
}
}

И класс который импортирует в себя звезду:
import Star;
class Double {
static function _create(Staring:Object):MovieClip {
//
trace("Class open");
//
var _mc:MovieClip = Star._create({targ:_root});
return _mc;
}
}
ну и на сцене:
import Double;
var _mc:MovieClip = Double._create({targ:this});
Go._move(_mc);
setTimeout(Go._stop, 12000, _mc);


Я молодец :rolleyes: но еще многое предстоит сделать =) и без вас я бы ничего несделал, спасибо