Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как подгружать скрипты в основной код из *.as файлов ? (http://www.flasher.ru/forum/showthread.php?t=145113)

iillyyaa 29.09.2010 17:06

Как подгружать скрипты в основной код из *.as файлов ?
 
вот понадобилось мне рости в познаниях флеша, кода стало больше.. решил, лучше разделить его на части и каждую "основную" часть засунуть в отдельный файл..

в самом fly файле у меня нет ни строчки кода (analiz.fla)
рядом лежит файл analis.as, который подгружается "сам"
внутри analis.as

Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.text.*;
        import flash.filters.GlowFilter;
        import flash.utils.*;
        public class analiz extends MovieClip {
                public function analiz() {
                trace('превед');
                tratata();
        }
}

вот хочу выдернуть одну функцию из основного кода и засунуть в файл fun1.as

вопросы, что должно быть в файле fun1.as ? только та функция ? или что то ещё ?
как и где мне подгрузить файлик fun1.as ?
функцию из этого файлика я вызывать планирую в коде в основном файле analis.as

скажем содержимое fun1.as
Код AS3:

private function tratata() {
        trace('tratata');
}

верно ? или что то ещё должно быть в нём ?

Добавлено через 5 часов 44 минуты
что, все считают, что вопрос нубский ? или что ? ну я реально не знаю.. и где прочесть, так что бы понять не перечитав сотни разных страниц не знаю.. да и везде расплывчато написано, нужно понимать половину уже :)

samana 30.09.2010 11:38

Я как всегда не уверен в правильности вопроса, но если хотите создать глобальную функцию, что-бы вызвать её где угодно, как например trace(), то создайте *as файл с таким же именем как и функция, такого вида:
Код AS3:

package {
        public function tratata() {
                trace("tra-ta-ta");
        }
}

tratata.as
И вызывайте её где хотите.

iillyyaa 30.09.2010 14:27

а как же этот файл сам прикрепится к нужному fly ?

у меня есть код чужой прокрутки, там в основном кадре fly файла указан код

Код AS3:

import gui.Scroller;

в папке gui лежит файл Scroller.as с содержимым

Код AS3:

package gui{
        import flash.display.MovieClip;
        import flash.events.Event;
        public class Scroller extends MovieClip{
                public function Scroller(_mc:MovieClip,_hght:Number):void{

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

AlesNormales 30.09.2010 14:45

каждому *.as файлу нужно указыать что импортировать. Кроме того что объявлено в одном с ним пакете.
Как крепится к fla? Если имеется ввиду класс документа, то он указывается относительно самого fla. Если лежит в одной с ним папке-то просто имя класса. если в другой папке-то пакет.имя_класса, если вложенность то пакет.пакет...пакет.имя_класса.

AlesNormales 30.09.2010 15:15

Вложений: 1
я попытался это изобразить (кроме paint под рукой ничего не было). Черные "прямоугольники" это папки. В красной рамке-файлы.

Wolsh 30.09.2010 15:39

package dc
package dc.pak
package dc.pak.pak1

iillyyaa 30.09.2010 15:47

так а где его подгружать ?
есть у меня analiz.fla и analiz.as

тут нужно указывать в analiz.as подгрузку tratata.as ? (tratata.as я положу туда же где analiz.fla и analiz.as)

Код AS3:

package {
        import flash.display.*;
 
        import tratata;
 
        public class analiz extends MovieClip {
                public function analiz() {
                trace('превед');
                tratata();
        }
}

и я так понимаю, если нового ничего мне не нужно подгружать, то в tratata.as я ничего не импортирую..

Код AS3:

package {
        public function tratata() {
                trace("tra-ta-ta");
        }
}

всё верно ?

Добавлено через 9 минут
или надо:

Код AS3:

package {
        public class tratata extends MovieClip{
                public function tratata() {
                        trace("tra-ta-ta");
                }
        }
}

или если там просто функция, то так ?
Код AS3:

package {
        public class tratata{
                public function tratata() {
                        trace("tra-ta-ta");
                }
        }
}


AlesNormales 30.09.2010 15:58

Wolsh спасибо что поправили.

Верно. у Вас же все в одном безымянном пакете. Импортировать (или как вы говорите подгружать) друг друга вашим файлам не надо. Они уже логически объединены. Можете просто пользоваться функцией тартата. А вот если функции из файлов анализ и тратата используют другие пакеты, то в каждом файле нужен будет импорт этих пакетов. например если анализ и тратата оба используют спрайт, то этот импорт должен быть и в одном и в другом файле. Все что вам надо сделать-это указать классом докумена - analiz.

iillyyaa 30.09.2010 16:13

1136: Неправильное количество аргументов. Ожидается 1.

жалуется на вызов функции tratata(); в основном коде файла tra.as

файл tra.as

Код AS3:

package {
        import flash.display.*;
        import flash.text.*;
        public class tra extends MovieClip {
                public function tra() {
                        trace('превед');
                        tratata();
 
                }
        }
}

файл tratata.as

Код AS3:

package {
        import flash.display.*;
        import flash.text.*;
        public class tratata extends MovieClip {
                public function tratata() {
                        trace('тратата');
                }
        }
}


AlesNormales 30.09.2010 16:18

ну так Вы тратата классом сделали и функцию не вызываете, пишите теперь new tratata(), вызовете конструктор, которые напишет таки тратата

Код AS3:

public class tra extends MovieClip {
private var tr:tratata = new tratata();


iillyyaa 30.09.2010 16:23

не особо понял...

моя цель, вынуть функцию tratata из файла tra.as в другой файл и вызвать её потом из файла tra.as

Добавлено через 2 минуты
засунул

Код AS3:

private var tr:tratata = new tratata();

в tra.as

а как вызвать ?

tr();

не работает


да да, вот такой я ламер :))

Добавлено через 9 минут
как сделать tratata() не класом а просто функцией ? которую я бы вызвал потом ?

AlesNormales 30.09.2010 16:33

что вызвать? у Вас больше нет функции тратата. теперь это конструктор класса. и вызывается он когда Вы создаете объект класса
Код AS3:

new tratata()

вот тут вызывается конструктор
Если нужна просто функция, то воспользуйтесь советом Samana

iillyyaa 30.09.2010 16:41

ага, так работает...

Код AS3:

package {
        public function tratata() {
                trace("tra-ta-ta");
        }
}


вот попытался чуть усложнить код, и засада :)

Код AS3:

package {
        import flash.display.*;
        import flash.text.*;
        public class tra extends MovieClip {
                public var tt = 'хелоу';
                public function tra() {
                        trace('превед');
                        tratata();
                }
        }
}

Код AS3:

package {
        public function tratata() {
                trace(tt);
        }
}

1120: Обращение несуществующего свойства tt.

AlesNormales 30.09.2010 16:41

или так:
Код AS3:

package {
public class tr {
public static function tratata() {
trace("tratata");
}
}
}

вызывать тогда можно без создания экземпляра класса.
например
Код AS3:

tr.tratata()

будет работать

Добавлено через 4 минуты
переделайте tratata
Код AS3:

package {
        public function tratata(_message:String) {
                trace(_message);
        }
}

и вызвайте ее
Код AS3:

tratata(tt)

И почитайте Мука, он на полкниги выложил основы AS3. там все это есть

iillyyaa 30.09.2010 16:47

а если у меня 10 переменных ??

Добавлено через 2 минуты
реально там 15 переменных, и 180 строк кода.. вот я и хочу вынести их в отдельный файл, что бы более читабельным был код.. в дальнейшем повыкинуть ещё несколько функций и будет аккуратный, красивый код :)

AlesNormales 30.09.2010 16:50

Код AS3:

tratata(v0);
tratata(v1);
tratata(v2);
tratata(v3);
tratata(v4);
tratata(v5);
tratata(v6);
tratata(v7);
tratata(v8);
tratata(v9);

Добавлено через 1 минуту
передавайте массивом все 15 в функцию, или просто через запятую. какая разница сколько их?

iillyyaa 30.09.2010 16:53

Код AS3:

package {
        import flash.display.*;
        import flash.text.*;
        public class tra extends MovieClip {
                public var tt = 'хелоу';
                public function tra() {
                        trace('превед');
                        tr.tratata();
                }
        }
}

Код AS3:

package {
        public class tr {
                public static function tratata() {
                        trace(tt);
                }
        }
}

1120: Обращение несуществующего свойства tr.

AlesNormales 30.09.2010 16:53

Код AS3:

tratata(varArray:Array);
tratata(v1,v2...vn);


iillyyaa 30.09.2010 16:54

не, я не передаю переменные, точнее значения... я обращаюсь к переменным, которые объявлены в tra.as а использовать, к примеру изменить я хочу в tratata.as или просто трасертом вывести...

bumb0x 30.09.2010 16:54

в одном as файле может быть описание только одного класса или одной функции и т.д.
И название файла должно соответсвовать имени описанному в нём объекте.

AlesNormales 30.09.2010 16:55

класс tr переименовали в tr.as?

iillyyaa 30.09.2010 16:55

я делаю
Код AS3:

trace(tt);

зачем мне её передавать, если она уже объявлена ??

Добавлено через 1 минуту
переименовал теперь, теперь старая ошибка :)

1120: Обращение несуществующего свойства tt.

Добавлено через 3 минуты
tra.as

Код AS3:

package {
        import flash.display.*;
        import flash.text.*;
        public class tra extends MovieClip {
                public var tt = 'хелоу';
                public function tra() {
                        trace('превед');
                        tr.tratata();
                }
        }
}

tr.as

Код AS3:

package {
        public class tr {
                public static function tratata() {
                        trace(tt);
                }
        }
}


bumb0x 30.09.2010 17:01

а откуда классу tr знать о свойстве tt класса tra?

AlesNormales 30.09.2010 17:03

если хотите из одного класса менять переменные другого класса, то в классе, переменные которого нужно менять, напишите методы, которые будут это делать, а вызывайте их из другого класса.

iillyyaa 30.09.2010 17:03

а как узнать ? :))

AlesNormales 30.09.2010 17:03

iillyyaa, объясните внятно чего Вы хотите, я запутался.

Добавлено через 31 секунду
узнать-
передать параметром, как раньше

Добавлено через 1 минуту
она объявлена в другом классе. эта переменная-член класса, чтобы взять книжку в биллиотеке, надо сначала зайти в библиотку. и то могут не дать

iillyyaa 30.09.2010 17:12

мне не нужен класс, мне нужно вынести функцию с переменными...

у меня файл analiz.fla и analiz.as, вот содержимое analiz.as (урезанное)

Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.text.*;
        import flash.filters.GlowFilter;
        import flash.utils.*;
        public class analiz extends MovieClip {
                public var cont_prim:Sprite = new Sprite();
                public var to_cont_opisanie = new TextField();
 
                public function analiz() {
                        adddd();
                        addChild(cont_prim);
                        to_cont_opisanie.text = 'тратата2';
                }
 
                private function adddd() {
                        cont_prim.opaqueBackground=0xEEEEEE;
 
                        to_cont_opisanie.textColor = 0xFF0000;
                        to_cont_opisanie.autoSize = TextFieldAutoSize.LEFT;
                        to_cont_opisanie.selectable = false;
                        to_cont_opisanie.text = 'тратата';
                        to_cont_opisanie.x = 0;
                        to_cont_opisanie.y = 0;
                        cont_prim.addChild(to_cont_opisanie);
                        cont_prim.x=0;
                        cont_prim.y=0;
                }
        }
}

cont_prim - контейнер, куда складываются куча картинок и текстовые поля, вот эти текстовые поля я буду менять из основного кода.. функция лишь описывает где какое поле и с каким именем..

to_cont_opisanie - текстовое поле помещённое в контейнер

скажем вот такой код у меня есть, я хочу вынести в отдельный файл функцию adddd()

как это сделать ? :)

AlesNormales 30.09.2010 17:20

ваша функция-это метод класса анализ. Если очень нужно вынести ее функционал наружу, нужно создать функцию например ExternalAdd и передать ей экзепляр анализа, и пусть она делает там с ним что надо.
будет так
Код AS3:

private function adddd(){
ExternalAdd (this);}

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

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

iillyyaa 30.09.2010 17:24

ну да, я хочу облегчить код... мне эта функция в 180 строк не нужна там... было бы читабельнее, если бы она лежала где то отдельно и всего лишь вызывалась...

как к примеру на пхп можно сделать...

а какое содержимое будет у ExternalAdd ?

могли бы вы разделить тот код, что я написал ?

сделать 2 кода для каждого из файлов, что бы оно работало :)

AlesNormales 30.09.2010 17:29

могу, хотя я бы ограничился сворачиванием фунции в плюсик. глаза бы не мозолила)

iillyyaa 30.09.2010 17:34

хе хе, реально проще свернуть в плюсик :))

спасибо за ценный совет :)))

Добавлено через 1 час 10 минут
кстати, нигде в настройках нельзя ли увеличить кол-во отображаемых символов в скрытом "в плюсик" ?
по умолчанию показывает первые 6 символов кода и 3 точки хотелось бы чуть больше :)
можно было бы нормально прятать большие массивы.. и выдно было бы имя массива


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

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