0

由于最新的 AIRSDK3.8 终于支持 StageVideo,因此希望将 StageVideo 合并为适用于桌面应用程序的 iOS。

但是,我还需要能够以某种方式对其进行补间和遮罩以创建“视差”效果。

有谁知道这是否可能,因为它不再出现在显示列表中?

4

1 回答 1

0

掩蔽StageVideo非常容易。您所要做的就是在其上显示一个对象。由于 StageVideo 呈现在舞台下方,因此 DisplayList 中的所有内容都呈现在它之上。因此,在您遮盖/使背景透明后,只需通过舞台上的 DisplayObject 覆盖您的视频占据的区域,您就有了遮罩。

补间是可能的。这很脏,但这是可能的。请参阅我去年写的这篇关于补间的博客文章StageWebView(显示方式大致相同,只是在显示列表上方而不是在其下方)。它还应该包括我使用的测试应用程序。

该帖子中的代码以防我的博客出现故障(不太可能,因为 WebHostingHub 喜欢在我的帐户到期前两个月自动更新我的帐户......)

import flash.net.*;

private var swv:StageWebView;
private var startX:Number;
private var finalX:int;
private var repeatCount:int;

private function addedToStage():void{
this.startX = -600;
this.finalX = 120;
this.repeatCount = 100;
this.swv = new StageWebView();
this.swv.stage = this.stage;
this.swv.viewPort = new Rectangle( startX, 50, 600, stage.stageHeight - 50 );
this.swv.loadURL( 'http://flexsupreme.com' );
this.swv.addEventListener(Event.COMPLETE,this.loadComplete);
}

private function loadComplete(e:Event = null):void{
var t:Timer = new Timer( 1000 / stage.frameRate, this.repeatCount );
t.addEventListener( TimerEvent.TIMER, this.slide );
t.start();
}

private function slide(e:TimerEvent = null):void{
var change:int = Math.round ( ( this.finalX - this.startX ) / this.repeatCount );
if ( this.swv != null ) {
this.swv.viewPort = new Rectangle( this.swv.viewPort.x + change, 50, 600, stage.stageHeight - 50);
}
}

如果你愿意,你也可以使用像 Greensock 这样的 Tween 库。您只需对视口进行补间。我不记得您是否需要重新设置视口以应用更改(可能这样做),但 Greensock 在其to()方法中提供了一个“onUpdate”回调,您可以使用它来执行此操作。

于 2013-08-29T23:51:25.217 回答