Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   передача параметров загруженному swf-файлу (http://www.flasher.ru/forum/showthread.php?t=176789)

Aquahawk 28.03.2012 16:31

Цитата:

как добавить в swf функцию, которую можно юзать из другого swf.
Просто в главном классе той swf которую будете подгружать делаете
Код AS3:

public function myfunc():void{
...
}

В главной swf берете
Код AS3:

loader.content["myfunc"]()

Параметры для вашеё функции можете сделать такие как вам захочется.

warsem 28.03.2012 20:02

Содержимое папки:
man.fla
Man.as
test.fla

Содержимое man.fla:
Код AS3:

import Man;

Содержимое Man.as:
Код AS3:

package {
        public class Main {
                private var movie:int;
 
                public function getMovie():int {
                        return movie;
                }
 
                public function setMovie(i:int):void {
                        movie = i;
                }
        }
}

Содержимое test.fla:
Код AS3:

var req:URLRequest = new URLRequest('c:\man.swf');
var loader:Loader = new Loader();
loader.load(req);
 
//loader.content('setMovie');
 
//loader.setMovie(1);
//trace(loader.getMovie());

Вообще колдовать пробовал. Единственное, что удавалось, так это в самом man.fla создать класс Маn и там юзать функции setMovie/getMovie. Но мне то они нужны в test.fla

Подозреваю, что я просто не правильно понимаю как это должно работать в теории.

Aquahawk 28.03.2012 20:19

для начала. Имя класса должно совпадать с именем файла. Класс Main а файле Man жить не может. Странно что вы не видите сообщения компилятора о том что так делать не нужно. Далее. Прописан ли ваш main как documentClass для main.fla
Ещё далее. Лоадер штука асинхронная. От того, что вы сказали ему что-то грузить, ещё не следует, что он это уже загрузил. Его контент будет доступен только после того, как он отправит вам событие о том, что он закончил работу. Пример того, как это делать советую посмотреть в документации к классу loader на сайте Adobe. Вообще настоятельно советую делать так: Как только вы видите незнакомый класс, то идёте в справку эдоб и читаете описание _всех_ методов и свойств что есть у этого класса с учётом наследования. Поверьте, это не так много и сэкономит вам время в разы. Вы бы уже точно всё это прочитали, пока ждёте ответов тут.

warsem 28.03.2012 21:20

Цитата:

Сообщение от Aquahawk (Сообщение 1071577)
для начала. Имя класса должно совпадать с именем файла. Класс Main а файле Man жить не может. Странно что вы не видите сообщения компилятора о том что так делать не нужно.

Это последствия колдовства. Пробовал менять название класса/файла. Косяк не в этом. С этим бы я справился.

Цитата:

Сообщение от Aquahawk (Сообщение 1071577)
Прописан ли ваш main как documentClass для main.fla

это система расположения файлов в папке или это что то в самом адобе нужно настраивать?

Цитата:

Сообщение от Aquahawk (Сообщение 1071577)
Ещё далее. Лоадер штука асинхронная. От того, что вы сказали ему что-то грузить, ещё не следует, что он это уже загрузил. Его контент будет доступен только после того, как он отправит вам событие о том, что он закончил работу. Пример того, как это делать советую посмотреть в документации к классу loader на сайте Adobe.

Сделаю отслеживалку события загрузки и почитаю на офф сайте как эт сделать) Чес.слово)

Добавлено через 6 часов 36 минут
Цитата:

Сообщение от warsem (Сообщение 1071579)
это система расположения файлов в папке или это что то в самом адобе нужно настраивать?

Вернулся с работы, загуглил. Я так понял, там указываетца основной класс FLA. Верно? Нужно ли тогда прописывать его в import?

Aquahawk 29.03.2012 12:31

нет в импорт не надо, надо указать его главным классом.

warsem 29.03.2012 20:06

Вопрос снимаю, не правильно указывал главный класс. Проблему не решил, но пока нужно самому порытца.
Большое спасибо за помощь, без вас бы не разобрался бы(и не узнал бы много нового)



Дубль два:

Содержимое папки:
- man.fla
- Man.as
- test.fla

Файл man.fla пустой(кроме самого клипа), класс Man указан как основной. Как научил Аквахавк=)

Файл Man.as:
Код AS3:

package {
        public class Man {
 
                private var movie:int;
 
                public function getMovie():int {
                        return movie;
                }
 
                public function setMovie(i:int):void {
                        movie = i;
                }
        }
}

Файл test.fla:
Код AS3:

var req:URLRequest = new URLRequest('C:\\man.swf');
var loader:Loader = new Loader();
loader.load(req);
 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,manLoaded);
addChild(loader);
 
function manLoaded(e:Event):void {
//        for (var i in loader.content) { trace(i); }  - ни чего не выводит
//        trace(loader.content['getMovie']); - undefined
}


Либо не видит мои методы, либо не наследует. Что я делаю не так?


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

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