【问题标题】:AS3 undefined property stageVideosAS3 未定义属性 stageVideos
【发布时间】:2012-10-21 17:40:34
【问题描述】:

我有一个针对 iOS 和 Android 的 AS3 Mobile AIR 项目。出于某种原因,当我尝试访问 stageVideos 时,即 stage.stageVideos[0]...舞台上没有可用的 stageVideos 属性?很奇怪,因为我以前做过。我的应用程序正在使用 Starling 和 Features UI 框架,而我的课程正在扩展 Screen。我对这两个框架都很陌生,但一直是老手。谢谢!

【问题讨论】:

  • 你能发布一些代码吗?另外,您确定您使用的是 Stage 而不是 Stage3D?
  • 您的目标是正确的 flash/air 版本吗?
  • 谢谢,我想通了。 Flash 展示阶段在 Starling.current.nativeStage.stageVideos[0] 中可用;但是您需要先隐藏 Starling.current.stage3D 否则它将不可见。

标签: actionscript-3 starling-framework


【解决方案1】:

应该是硬件问题。当 StageVideo 在特定设备上不可用时,stage.stageVideos 属性为空,因此请确保您应该像这样进行检查。

var stageVideo:StageVideo;

if ( stage.stageVideos.length >= 1 ) {
    stageVideo = stage.stageVideos[0];
}

或在舞台上注册 StageVideoAvailabilityEvent

stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, stageVideoChange);

private function stageVideoChange(e:StageVideoAvailabilityEvent):void
{
    if(e.availability == AVAILABLE)
    {
         // (stage.stageVideos.length >= 1) is TRUE so we can use stageVideo[0]
    }
    else
    {
         // StageVideo become unavailable for example after going from fullscreen 
         // back to wmode=normal, wmode=opaque, or wmode=transparent
    }
}

当然,第二种方法更容易接受,因为每次 StageVideo 可用或否定时都会通知您。请注意,如果在 StageVideoAvailabilityEvent 上注册侦听器时舞台视频可用,则立即调用侦听器函数 (stageVideoChange)。

【讨论】:

    【解决方案2】:

    事实证明,Starling 在实际 Flash 显示舞台顶部的 Stage3D 上运行。所以为了做到这一点,你需要先隐藏 Starling Stage3D:

    Starling.current.stage3D.visible = false
    

    然后你可以访问和显示...等stageVideos并添加到flash展示阶段:

    _stageVideo = Starling.current.nativeStage.stageVideos[0];
    

    所以基本上,原生 Flash 显示阶段位于 Starling.current.nativeStage 属性上,但是,除非您先隐藏 Starling.current.stage3D FIRST,否则无法显示。

    感谢您的回复!希望这可以帮助其他有同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2014-06-29
      • 2012-02-22
      • 2021-08-17
      • 2015-01-13
      • 2015-01-12
      • 2013-07-12
      相关资源
      最近更新 更多