【问题标题】:movieClip not stopping always looping电影剪辑不停止总是循环
【发布时间】:2012-06-14 14:32:04
【问题描述】:

我有一个获取movieClip 的类,然后使用addChild 将其添加到显示中。问题是我根本无法播放或停止它。基本上我不能与movieClip交互。

代码如下:

public function Avatar(movieClip:DisplayObject) //class constructor
{   ...
    avatarSprite = MovieClip(movieClip)
    addChild(avatarSprite);
    avatarSprite.gotoAndStop(1); //this is not working
    trace(avatarSprite.currentFrame) //always returns 1
    trace(avatarSprite.isPlaying) // returns false
    ...
    }

当我运行代码时,movieClip 会循环播放,并且不会像我预期的那样停止。我不确定有什么问题。正如你所看到的,我没有做任何太复杂的事情。知道我在这里缺少什么吗?

提前致谢

编辑: 正如 miguelSantirso 指出的那样。问题在于movieClip 中的嵌套动画,而不是实际代码本身。有谁知道如何停止播放嵌套动画?

【问题讨论】:

  • 时间轴上不是有play()函数吗?
  • 我认为这无关紧要,但我尝试按照您的建议添加 avatarSprite.play()。虽然没有改进。这就是你的意思吗?
  • 对不起,我的意思是;时间轴上是否有代码,在那个 avatarSprite 影片剪辑中?你应该去 Flash IDE 检查一下。
  • avatarSprite.stop() 不起作用吗?如果没有,请添加 `stop();到 .fla 的操作面板中的第一帧(或者可能是另一个特定帧)(按 F9 打开面板)。
  • 可能需要查看更多代码。问题似乎与您发布的代码无关。你如何实例化 avatarSpriteClass?你是怎么调用 Avatar() 函数的?

标签: actionscript-3 flash adobe flash-builder


【解决方案1】:

此函数将停止所有嵌套的movieClips(如果您将false传递给useStop参数,则播放它们)

function recursiveStop(parentClip:DisplayObjectContainer, useStop:Boolean = true, gotoFrame:Object = null):void {
    var tmpClip:MovieClip = parentClip as MovieClip;
    if (tmpClip) {
        if (useStop) {
            (gotoFrame != null) ? tmpClip.gotoAndStop(gotoFrame) : tmpClip.stop();
        }else {
            (gotoFrame != null) ? tmpClip.gotoAndPlay(gotoFrame) : tmpClip.play();
        }
    }

    var i:int = parentClip.numChildren;
    while(i--){
        if(parentClip.getChildAt(i) is DisplayObjectContainer){
            recursiveStop(parentClip.getChildAt(i) as DisplayObjectContainer, useStop, gotoFrame);
        }
    }
}

【讨论】:

  • 方法的第一行有点问题。应该是 (useStop) 吗? parentClip.stop() : parentClip.play();否则,无论 useStop 是否为 false,parentClip 都将始终停止。但除此之外,它完美无缺。感谢您的帮助,并感谢大家的提示 =)
【解决方案2】:

检查您的影片剪辑中是否没有嵌套动画。暂停影片剪辑不会停止内部动画。

【讨论】:

  • 你是对的...movi​​eClip 中有嵌套动画。我制作了一个没有任何嵌套动画的虚拟电影剪辑,效果很好。你知道无论如何要停止播放嵌套动画吗?由于我是从外部来源获得艺术作品的,因此我很难对其进行更改。
  • 我知道的唯一方法是递归地遍历影片剪辑。如果您在 Google 中查找它,您可能会发现一些东西。
【解决方案3】:

不要将其转换为影片剪辑,而是尝试将其作为影片剪辑处理。

avatarSprite = movieClip as MovieClip;

(考虑到传入的movieclip 实际上是一个movieclip ofcourse...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多