初学者:在Haxe / ActionScript3中动态地将帧插入到MovieClip中

时间:2009-01-15 08:22:20

标签: flash actionscript-3 dynamic haxe

假设我有一个资源文件导出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

[edit]更多详情

我没有使用Flash IDE。我正在使用:

  • Inkscape(用于SVG生成)
  • swfmill(创建资产文件)
  • Haxe(制作动画)

我目前还没有尝试构建游戏或任何互动游戏。我设法创建了一个简单的动画,其中背景精灵正在旋转(就是这样)。我使用TimerEvent来实现这一目标。但我真的希望能够构建一个MovieClip并在其上附加单独的帧然后在循环播放它。

或者我可以创建一个MovieClip,并以编程方式逐帧绘制。 (然后当然是循环播放)

基本上我想用ActionScript来生成内容而不是swfmill的XML(不是simple方言,simple很好。由于我是初学者,我不知道我能给你什么其他信息。所以请告诉我是否可以提供任何其他细节?

2 个答案:

答案 0 :(得分:5)

没有Flash IDE,使用gotoAndStop()等没什么意义。

由于您无法在不同的框架上添加不同的资源,因此您应该使用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;
       }
    }
}

答案 1 :(得分:0)

我不知道你想做什么的方便方法。您的示例将无法工作,因为currentFrame是一个只读属性,它返回的只是一个表示帧号的整数,而不是构成实际帧的数据。

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

然而,根据你想要达到的目标,这可能不是很有用,但如果你澄清一下你的问题,我相信我们可以提出一个适当的建议。