Flixel - Как загрузить и воспроизвести встроенный SWF-файл - PullRequest
0 голосов
/ 28 марта 2011

Я искал в Интернете, и все коды, которые я нашел, предназначены для воспроизведения внешних SWF-файлов с временной шкалой. Файл, который я пытаюсь загрузить, не имеет временной шкалы. Я использую инфраструктуру Flixel для этого проекта, и файл, который я хочу воспроизвести, также создан на Flixel (исходный файл не имеет только файл swf).

Большая часть кода у меня взята из шаблона ролика, который я нашел на форуме Flixel. Вот то, что я имею до сих пор:

package  
{
import org.flixel.FlxState;
import org.flixel.FlxG;
import flash.display.MovieClip;
import flash.media.SoundMixer;
import flash.events.Event;

public class SponsorsState extends FlxState 
{

    //Embed the cutscene swf relative to the root of the Flixel project here
    [Embed(source='assets/DirtPileLogo.swf', mimeType='application/octet-stream')] private var SwfClass:Class;   
    //This is the MovieClip container for your cutscene
    private var movie:MovieClip;
    //This is the length of the cutscene in frames
    private var length:Number;

    override public function create():void
    {
        movie = new SwfClass();
        //Set your zoom factor of the FlxGame here (default is 2)
        var zoomFactor:int = 2;
        movie.scaleX = 1.0/zoomFactor;
        movie.scaleY = 1.0 / zoomFactor;
        //Add the MovieClip container to the FlxState
        addChildAt(movie, 0);
        //Set the length of the cutscene here (frames)
        length = 100;
        //Adds a listener to the cutscene to call next() after each frame.
        movie.addEventListener(Event.EXIT_FRAME, next);
    }
    private function next(e:Event):void
    {
        //After each frame, length decreases by one
        length--;
        //Length is 0 at the end of the movie
        if (length <= 0)
        {
            //Removes the listener
            movie.removeEventListener(Event.EXIT_FRAME, next);              
            //Stops all overlaying sounds before state switch
            SoundMixer.stopAll();
            //Enter the next FlxState to switch to
            FlxG.state = new PlayState();
        }           
    }

}

}

Когда я запускаю это, я получаю эту ошибку: Type Coercion failed: cannot convert SponsorsState_SwfClass@fb5161 to flash.display.MovieClip., все, что я хочу сделать, это воспроизвести файл swf для установленного количества кадров и перейти в следующее состояние.

Есть идеи, как это сделать?

Ответы [ 3 ]

0 голосов
/ 28 марта 2011

Вы неправильно устанавливаете mimeType для вашего встраивания.Удалите mimeType, и он должен работать правильно.См. Документы по встраиванию активов для получения дополнительной информации.

0 голосов
/ 04 сентября 2011

Я считаю, что решение, которое вы ищете, это использовать класс Loader.

[Embed (source = "assets/DirtPileLogo.swf", mimeType = "application/octet-stream")]
private var content:Class;

private var loader:Loader;      

public function Main():void 
{
    var data:ByteArray = new content();
    loader = new Loader();
    addChild( loader  );
    loader.loadBytes( data, new LoaderContext(false, new ApplicationDomain() ) );   
    // ... add listener to loader if necessary, etc...
}
0 голосов
/ 28 марта 2011

Попробуйте заменить следующее:

[Embed(source='assets/DirtPileLogo.swf', mimeType='application/octet-stream')] 
private var   SwfClass:Class;   
//This is the MovieClip container for your cutscene
private var movie:MovieClip;

в

//Mark your symbol for export and name it => MyExportedSymbol
[Embed(source='assets/DirtPileLogo.swf', symbol = "MyExportedSymbol")] 
private var   SwfSymbol:Class;   
//Make sure that MyExportedSymbol base class is MovieClip
private var movie:MovieClip = new SwfSymbol;

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

...