【问题标题】:AS3: Actions inside dynamically added movie clip not workingAS3:动态添加的影片剪辑中的动作不起作用
【发布时间】:2015-05-06 01:14:27
【问题描述】:

我在 AS3 中尝试进行的一个简单测试遇到了一个非常奇怪的问题。

我的第一帧有两个功能:

function function1 ():void {
    trace ('function1 executed');

    mc.gotoAndStop (2);

    function2 ();
}

function function2 ():void {
    trace ('function2 executed');

    var test_mc:test_lib = new test_lib ();
    addChild (test_mc);
}

如您所见,function1 改变了“mc”上的帧,还调用了 function2,它从舞台的库中添加了一个子影片剪辑。

在第 60 帧从另一个简单影片剪辑内部调用 Function1,如下所示:

Object(parent).function1 ();

添加的这个子影片剪辑只是一个黑色方块,在它的第一帧上有一个跟踪动作。

添加孩子后,跟踪操作应该立即起作用,但事实并非如此。 但是,如果我删除或注释 mc.gotoAndStop(2) 行,跟踪操作将正常工作。如果我在调用 function2 之后放置 mc.gotoAndStop(2),它也可以工作。

我不明白为什么会这样。

这发生在我正在工作的一个更大的项目中,因此我决定将问题隔离在一个新文件上,并创建上面的示例。这很奇怪。

【问题讨论】:

  • 我不知道为什么它不起作用,但我知道如何解决这个问题。呼叫 function2 有延迟(例如 1 毫秒)。 setTimeout(function2, 1); 有效!
  • 很奇怪吧?正如我所说,如果我只是在 function2(); 之后调用 mc.gotoAndStop(2) ,它也可以工作。我只是想知道为什么会这样。对我来说似乎是一个错误。

标签: actionscript-3 flash actionscript addchild


【解决方案1】:

尝试在 mc 框架 2 内移动你的 function2。

主要时间线:

function function1 ():void {
    trace ('function1 executed');

    mc.gotoAndStop (2);
}

在 mc -> 在第 2 帧

trace ('function2 executed');
var test_mc:test_lib = new test_lib ();
addChild (test_mc);

您必须使用.root 稍微修改mc 中的代码

【讨论】:

  • 这是一个可能的解决方案。但正如我所说,我已经可以通过在 mc.gotoAndStop(2) 之前调用 function2() 来使其工作。我只是想知道为什么会这样......
【解决方案2】:

什么是mc?如果 mc 是包含你的两个函数的 MovieClip,那么你的代码显然不能工作,因为在你 gotoAndStop(2) 之后,你不能更长的调用 function2() 因为 function2() 在第二帧上不存在。

【讨论】:

  • mc 不是具有这些功能的影片剪辑。这只是舞台上的一个简单的电影片段。
猜你喜欢
  • 2013-12-22
  • 2021-02-24
  • 2013-04-27
  • 2018-10-14
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多