Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подгрузить внешний класс (http://www.flasher.ru/forum/showthread.php?t=105191)

FilimoniC 10.12.2007 14:14

Подгрузить внешний класс
 
Здравствуйте!
В данный момент занимаюсь переделыванием однго проекта на AS2 в AS3, попутно модернизируя.

Проблема следующая: нужно сделать в данном проекте модульность, то есть чтобы в случае правки или добавления какого-ибо элемента достаточно было подменить только один SWF-файл.

Код:

.\Main.swf
.\com\InputField.swf
.\com\ConfirmButton.swf

Собственно, несколько вопросов:
- Возможно ли такое на AS3?
- Как правильно присоединить вынести класс с графикой во внешний файл?
- Как правильно с ним работать так, чтобы и класс имел доступ к основному мувику, и наоборот - мувик имел доступ к методам класса.

Знаю, где-то мелькало что-то подобное, поиском пользовался, не нашел!

etc 10.12.2007 14:16

1) Да;
2) Непонятен вопрос;
3) Интерфейсы.

FilimoniC 10.12.2007 14:27

Цитата:

Сообщение от __etc
2) Непонятен вопрос;

те нужно ли каждый класс привязывать к DocumentClass (отсюда - под класс новый документ), или можно подгрузить SWFку как библиотеку классов, как правильно Linkage настроить во внешнем SWF-файле.

Цитата:

Сообщение от __etc
3) Интерфейсы.

т.е.?
типа LocalConnection
или я смогу обращаться к ним как
Код:

/*
Как-то подгружаем библиотеку SWF, содержащую LoadedClass
*/
var loadedClass_mc = new LoadedClass();
loadedClass_mc.setVariable("xxx", "yyy");
addChild(loadedClass_mc);

Может есть примеры, подкиньте плиз!

etc 10.12.2007 14:31

Узнайте, что такое интерфейс.
Вопросы отпадут.

И про applicationDomain.getDefinition.

FilimoniC 10.12.2007 15:29

Большое спасибо, с подгрузкой разобрался, конструктор класса подгружаемого объекта выполнился. А вот с функциями проблема:
Код:

TypeError: Error #1006: myFunction is not a function.
        at LibLoader/::completeHandler()

Это как раз "фиксится" интерфейсом, так?

Простите за неграмотность, просто приходится переделывать проект где весь код в кадрах, нет никаких классов итп, написанный по 7 плеер, трудновато попутно учить AS3. Благо временем почти не ограничен

etc 10.12.2007 16:02

Я не знаю, что вы делаете для получения подобной ошибки. Но явно что-то не так.

FilimoniC 10.12.2007 16:17

В загрузчике
Код:

var a:Class = info.applicationDomain.getDefinition("SquareClass") as Class;
addChild( new a() ); // Выдает "Constrictor started", начинает реагировать на крыску
trace (a.myFunction("hello!")); // Вылетает ошибка.

В библиотеке, в файле MyExpSymbol.as
Код:

package {
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
       
        class MyExpSymbol extends MovieClip  {
                var _counter:Number;
                var _isPressed:Boolean;

                public function MyExpSymbol() {
                        _counter = 0;
                        _isPressed = false;
                        addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
                        trace ("Constrictor started");
                }
                public function onMouseOut(event:MouseEvent):void {
                        if (_isPressed) {
                                event.currentTarget.scaleX -= 0.5;
                                event.currentTarget.scaleY -= 0.5;
                                _isPressed = false;
                        }
                }
                public function onMouseOver(event:MouseEvent):void {
                        if (!_isPressed) {
                                event.currentTarget.scaleX += 0.5;
                                event.currentTarget.scaleY += 0.5;
                                _isPressed = true;
                        }
                }
                public function myFunction(str:String):Number
                {
                        trace("HoHo:"+str+"!!");
                        return str.length;
                }
        }

}//Package

Linkage такой:
Имя Эдемента в библиотеке : MyExpSymbol
Class = SquareClass
BaseClass = MyExpSymbol

etc 10.12.2007 16:21

Так «a» — это не экземпляр класса, а сам класс. У класса нет такого метода.

FilimoniC 10.12.2007 16:23

Блин точно. Извините, туплю.

Поправился :
Код:

var a:Class = info.applicationDomain.getDefinition("SquareClass") as Class;
var obj = new  a(); // Выдает "Constrictor started", начинает реагировать на крыску
addChild( obj );
trace (obj.myFunction("hello!")); // Выдает "HoHo:hello!!!", затем 6 (длинна hello!)

Все работает, спасибо большое!

Так зачем же нужен Interface, я так и не понял.
По-сути, как я понял, это аналог .h (header) - файла в C., то есть попросту описывает, что можно из содержимого класса юзать?
Где его конкретно применять так и не понял. :(

iNils 10.12.2007 17:23

FilimoniC, не надо сообщать о каждом вашем шаге отдельным постом, когда хотите что-то добавить, используйте кнопку http://www.flasher.ru/forum/images/r...ttons/edit.gif и редактируйте последнее сообщение.

Интерфейсы описывают, какие свойства обязаны быть у класса для корректной работы.


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

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