【问题标题】:gotoAndPlay/gotoAndStop not working with numeric frame labelsgotoAndPlay/gotoAndStop 不适用于数字框架标签
【发布时间】:2011-10-29 02:15:43
【问题描述】:

由于我无法控制的原因,我目前正在处理一系列带有数字框架标签的 Flash 文件。这会导致一个问题,因为在使用 gotoAndPlay/gotoAndStop 时,Flash 似乎将字符串视为整数。

截图:

例如,gotoAndPlay('96') 实际上不会转到标签为“96”的帧,而是转到第 96 帧。

目前,似乎唯一的解决方案是手动确定每个标签所在的框架,因此我不会使用gotoAndPlay('96'),而是使用gotoAndPlay(718)。显然,这会很乏味(有很多帧标签),如果任何编辑需要移动东西,它还需要更改帧号。

有什么想法吗?是否有强制闪存在我忽略的数字框架标签上获得和播放/停止?

【问题讨论】:

    标签: flash actionscript-3 flash-cs4 flash-cs5 flash-cs3


    【解决方案1】:

    对我来说,这似乎是 Flash Player 的错误(或至少是设计缺陷)。但是您应该能够使用 MovieClip 上的 currentLabels 属性,它会为您提供一组 FrameLabel 对象。然后使用它在帧标签数字字符串和实际帧号之间创建自己的映射。

    这是我正在谈论的一些示例代码:

    var label : FrameLabel;
    var mapping : Object = {};
    
    // Create a mapping between frame label string (regardless of semantics)
    // and the frame number that it corresponds to.
    for each (label in myMovieClip.currentLabels) {
      mapping[label.name] = label.frame;
    }
    
    
    /**
     * Your own version of gotoAndPlay for labels, which will look into your
     * recently created mapping and play the right frame (by number) for the
     * given frame label.
    */
    function gotoAndPlayLabel(label : String) : void
    {
      myMovieClip.gotoAndPlay( mapping[label] );
    }
    

    然后,您将使用自己的 gotoAndPlayLabel() 函数按标签跳转到(并播放)帧。

    【讨论】:

    • 这对我来说似乎是一个设计缺陷。标签是一个标识符,应该只允许使用有效的标识符(也就是说,您应该按照与命名变量相同的规则命名,例如)。 IDE 不应允许数字标签。
    • 很好的解决方案,谢谢! (它是 .currentLabels 而不是 .frameLabels)。我也刚刚意识到我一直错误地认为 currentLabels 在播放头位置返回了当前帧标签的数组。事实证明,该方法实际上返回了场景中所有标签的列表。
    • 好渔获生产主义。更新了我的回复! @Juan Pablo:这确实是 Flash Player API 的设计缺陷。问题可能是(古老的)gotoAndPlay() 方法不强制执行严格的类型,而是在参数上使用 parseFloat()。如果为 NaN,则将其视为标签。
    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多