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

ty31k 17.02.2014 02:30

Манипуляция контентом SWF-файла
 
У меня есть проект во FlashBuilder. В него я подгружаю свой свф в котором храню мувиклипы.
Теперь к сути вопроса: как мне получить доступ к той или иной переменной?как манипулировать хоть какой-то информацией в свф файле?

silin 17.02.2014 09:52

для этого вы(компилятор) должны знать, что эта свф имеет (может предоставить) для управления извне
'цивилизовано' это решается с помощью интерфейсов, т.е. описаний 'внешних обязательств' класса флешки
чисто технически можно обратится и через динамический доступ instance["property_name"], но со всем вытекающим из такого подхода гемором и ненадежностью

alexandrratush 17.02.2014 11:51

вот тут есть хороший пример http://www.murmadillo.tut.su/as3/load-swf-metod.html

ty31k 18.02.2014 02:10

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

package
{
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.ByteArray;
 
    public class embedPart1 extends Sprite
    {
        [Embed(source="data/asset.swf", mimeType="application/octet-stream")]
        private var SwfClass:Class;
        //
        public function embedPart1()
        {
            var swfBytes:ByteArray = new SwfClass();
            var laoder:Loader = new Loader();
            laoder.loadBytes(swfBytes);
            laoder.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            this.addChild(laoder);
        }
        private function completeHandler(event:Event):void
        {
            var loaderInfo:LoaderInfo = event.target as LoaderInfo;
            trace(loaderInfo.content);
        }
    }
}

Но я так и не разобрался как с байт списка достать то, что нужно

silin 18.02.2014 10:27

>>Аналогичны ли у нее функции?
аналогичны чему?
c MovieClipAssets дело не имел, но полагаю, что он дает доступ к библиотечным символам подключенной флешки для всяких флексовых нужд, пример из предыдущего поста просто способ подключения внешней флешки и к управлению ее контентом напрямую не относятся

>>Но я так и не разобрался как с байт списка достать то, что нужно
'байт список' это просто файл, в том виде, в каком он хранится на диске, зная как он устроен, можно что-то достать и 'вручную' (но сомневаюсь, что у вас такая задача), а можно скормить лоадеру (laoder.loadBytes()), а тот уже сам все достанет и выдаст в управляемом виде (MovieClip, Sprite, Bitmap)
у слову, тот же результат вы получите, загрузив файл с диска laoder.load(..)

GBee 18.02.2014 14:42

Если мувикам прописанны классы,то можно так попробовать:

Код AS3:

private function completeHandler(event:Event):void
{
    var loaderInfo:LoaderInfo = event.target as LoaderInfo;
    var ad:ApplicationDomain = loaderInfo.applicationDomain;
    var cls:Class = ad.getDefinition("ClassNameFromYourMovie") as Class;
    var d:DisplayObject = new cls();
}


ty31k 18.02.2014 18:59

Цитата:

Сообщение от silin (Сообщение 1160206)
c MovieClipAssets дело не имел, но полагаю, что он дает доступ к библиотечным символам подключенной флешки для всяких флексовых нужд

так это и надо)

silin 18.02.2014 21:13

>> так это и надо)
что именно это?

подключение флешки в чистом AS
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
 
        public class Main extends Sprite
        {
                // Symbol1 - класс символа в библиотеке Assets.swf
                [Embed(source = "Assets.swf", symbol = "Symbol1")]
                public static const symbol1Class:Class;
 
                public function Main():void
                {
                        // экземпляр этого библиотечного символа
                        var asset1:Sprite = new symbol1Class() as Sprite;
                        addChild(asset1);
                }
        }
 
}

во флексе тег
Код AS3:

[Embed(source = "Assets.swf", symbol = "Symbol1")]
public static var symbol1Class:Class;

тоже создаст symbol1Class, только это будет не Sprite или MovieClip, а MovieClipAssets
обертка в виде MovieClipAssets нужна для каких-то там именно флексовых забубеней..

хорошо когда люди знают, что им надо.., кабы еще формулировали, чтоб и другим было понятно, было бы проще :)
сейчас мы говорим о флешке, внедренной на этапе компилирования, а спрашивали вы об подгружаемой флешке, разницу ощущаете ?

ty31k 18.02.2014 23:15

Огромное спасибо silin, это именно то, что я и хотел узнать)

ivaniyses 23.02.2014 13:41

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


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

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