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

初学者:在Haxe/ActionScript3中动态向MovieClip插入帧

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

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

    [编辑]更多详情

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

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

    在这一点上,我并没有试图构建游戏或任何互动的东西。我成功地创建了一个简单的动画,其中背景精灵正在旋转(仅此而已)。使用 TimerEvent s来实现这一点。但相反,我真的很想能够构建一个MovieClip,并在上面附加单独的帧,然后循环播放。

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

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

    2 回复  |  直到 9 年前
        1
  •  5
  •   Iain    17 年前

    如果没有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;
           }
        }
    }
    
        2
  •  0
  •   grapefrukt    17 年前

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

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

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