1

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

4

2 回答 2

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)。

于 2012-10-21T19:26:16.867 回答
1

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

Starling.current.stage3D.visible = false

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

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

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

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

于 2012-10-21T21:21:08.680 回答