繁体   English   中英

嵌入式动画片段中的gotoAndPlay

[英]gotoAndPlay in embedded movieclip

我正在开发带有嵌入式SWF的Air 2.6项目。

我正在使用以下嵌入代码:

[Embed(source = "../../assets/click_feedback.swf", symbol="sub_circle")]
    [Bindable]
    public static var click_feedback:Class;

以及以下代码来获取click_feedback类的实例:

private var cfb:MovieClip = new Assets.click_feedback() as MovieClip

问题是:

资产子圈子具有标记为“响应”的框架。 但是,无论是否使用gotoAndPlay调用标签,它都不会停止播放。

而且,在动画的末尾,有一个Event.COMPLETE调用,我的代码没有调用它。

我已经在构建CS5的CS5中测试了sub_circle资产,并且在那种环境下,它只有在调用'respond'时才能动画,并且脚本可以听到它触发的事件。

这是从SWF处理嵌入式资产的正确方法吗?

嵌入来自swf的单独符号通常不是一个好主意:

  1. 由于编译器必须对swf格式进行转码,因此它会减慢项目的编译速度。
  2. 嵌入从时间轴中删除所有AS代码(我没有检查,但也可能是删除了标签,这可能是造成您问题的原因)。

我建议嵌入hole swf文件并在运行时加载其字节,再添加一些代码来处理异步加载,但使用起来会更加自由和灵活:

  1. 您安全所有as3代码
  2. 您可以选择ApplicationDomain加载类的位置
  3. 如果您想将as代码和art / sounds资产分开,则可以随时轻松地通过url从Embedding切换到运行时swf加载。
  4. 使用AssetsManager(使用诸如load(ByteArray or URL)类的API, getSkin(name):DisplyObject )将您的资产组织到库中

适用于您的资产的代码示例:

package
{
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import flash.utils.ByteArray;

[SWF(width="800", height="200", backgroundColor="0x8B8B8B")]
public class astest extends Sprite
{
    [Embed(source="../../assets/click_feedback.swf", mimeType="application/octet-stream")]
    private static const common_art:Class;

    private var loader:Loader;
    private var domain:ApplicationDomain = ApplicationDomain.currentDomain;

    public function astest()
    {
        init();
    }

    public function init():void
    {
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.TOP_LEFT;

        var loaderContext:LoaderContext = new LoaderContext(false, domain);
        loaderContext.allowCodeImport = true;
        loader.loadBytes(new common_art() as ByteArray, loaderContext);
    }

    private function onLoaded(event:Event):void
    {
        var clip:MovieClip = getSkin("sub_circle") as MovieClip;
        addChild(clip);
    }

    private function getSkin(name:String):DisplayObject
    {
        if(domain.hasDefinition(name))
        {
            var clazz:Class = domain.getDefinition(name) as Class;
            return new clazz() as DisplayObject;

        }

        return null;

    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM