Форум 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)

warsem 17.03.2012 20:13

передача параметров загруженному swf-файлу
 
swf 1:
Код AS3:

var movie:int;
 
addEventListener(Event.ENTER_FRAME, onEnterFrameFunc);
 
function onEnterFrameFunc(e:Event):void {
    ... показывает разные ряды фреймов, в зависимости от movie
}


swf 2: загружаю Loader-ом swf1 и хочу менять переменную movie в нем.

function setMovie(i:int) { movie = i; } - так не разрешает

Помогите советом как сделать или может вообще лучше по другому осуществить эту затею?

in4core 17.03.2012 20:47

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

function setMovie(i:int) { swf2.movie = i; }

warsem 17.03.2012 21:38

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

нужно как то эту функцию setMovie сделать public или обращатца к ней по особенному из swf2.

КорДум 17.03.2012 21:40

Из подгружаемой флешки диспатчите событие, в главной ловите.

sneltyn 17.03.2012 22:11

Да здесь нужно диспатчить!

warsem 17.03.2012 22:22

а можно по-русски втф "дисптчить"?)

in4core 17.03.2012 22:23

dispatchEvent

warsem 17.03.2012 22:36

спасибо. буду знать в каком направление гуглить. а то хз с чем это едят.

carrotoff 17.03.2012 22:57

Гуглите сюда

warsem 28.03.2012 16:27

Ребят, руки опустились. Ни черта не разберусь, а читать всю книгу Мука времени нет - т.к. АС просто хобби. На первом месте семья и работа.

Кому не лень, объясните на пальцах плиз, как добавить в swf функцию, которую можно юзать из другого swf.

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:30.

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