代码之家  ›  专栏  ›  技术社区  ›  muhuk

初学者:在Haxe/ActionScript3中动态地将帧插入到电影剪辑中

  •  2
  • muhuk  · 技术社区  · 16 年前

    假设我有一个导出的资源文件 mc1 里面有4帧。我想创建一个新的 MovieClip 然后像这样插入框架:

    mc2:flash.display.MovieClip = new flash.display.MovieClip()
    
    mc1.gotoAndStop(2);
    mc2.gotoAndStop(1);
    mc2.currentFrame = mc1.currenctFrame
    mc1.gotoAndStop(1);
    mc2.gotoAndStop(2);
    mc2.currentFrame = mc1.currenctFrame
    mc1.gotoAndStop(2);
    mc2.gotoAndStop(3);
    mc2.currentFrame = mc1.currenctFrame
    mc1.gotoAndStop(4);
    mc2.gotoAndStop(4);
    mc2.currentFrame = mc1.currenctFrame
    

    [编辑]更多详细信息

    我没有使用flashide。我正在使用:

    • swfmill(用于创建资产文件)
    • Haxe(创建动画)

    我现在不是在尝试建立游戏或任何互动。我已经设法创建了一个简单的动画,背景精灵正在旋转(就是这样)。我曾经 TimerEvent

    基本上,我希望使用ActionScript来生成内容,而不是swfmill的XML(不是 simple 地方话 易于理解的

    2 回复  |  直到 8 年前
        1
  •  5
  •   Iain    16 年前

    由于无法在不同的帧上添加不同的资源,因此应使用addChild(assetToAdd)将它们全部添加为层,并将除一个以外的所有设置为visible=false。然后添加如下简单函数:

    function showFrame(num:int):void
    {
        for (var i:int = 0; i < numChildren; i++)
        {
           if (i == num)
           {
              getChildAt(i).visible = true;
           }
           else
           {
              getChildAt(i).visible = false;
           }
        }
    }
    
        2
  •  0
  •   grapefrukt    16 年前

    我不知道有什么方便的方法来做你想做的事。您的示例不起作用,因为currentFrame是一个只读属性,而且它返回的是一个表示帧编号的整数,而不是组成实际帧的数据。

    我的建议是,如果您需要动态地重新排列帧,可以将特定的MovieClip封装在一个自定义类中,该类将gotoAndPlay(x)转换为您想要的任何数字。

    然而,这可能不是很有用,取决于你试图实现什么,但如果你澄清一下你的问题,我相信我们可以提出一个适当的建议。