cocos2d-X 3.2的VideoPlayer是专门支持视频播放的类,可以满足基本视频播放的需求,但是如果想以视频为背景,或者是在视频上添加Node还是略显功能不足,今天研究了一下,在ios平台上解决了这个问题,效果如下图所示。
仔细看VideoPlayer的实现,发现它其实也是Node,但是发现在addChild过程中不论怎样改变它的层级,VideoPlayer都会显示在最上层,原因是VideoPlayer是在新的UIView上显示的,我们可以打开UIVideoPlayerIOS.mm这个文件,大概在160多行,就可以发现这点,也就是说VideoPlayer的视图默认总是在cocos2dx绘图层上面,因此我们就要自己改变这两个视图的层级顺序来解决这个问题。我的方式大概如下:
1.首先在AppController.mm文件中把_viewController设置成透明:
_viewController.view.backgroundColor = ;
```
2.创建一个新的UIViewController并添加两个子视图,一个视图用来显示下方的视频,第二个就是cocos2dx渲染所在视图,注意先后顺序。然后将其设置成跟视图。可以在这里设置个全局变量来保存用来显示video的视图,便于在后面调用。代码如下:
UIViewController* uiVC = init] autorelease];
videoView = init] autorelease];
;
;
// Set RootViewController to window
if ( .systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
;
}
else
{
// use this method on ios6
;
}
```
3.打开文件UIVideoPlayerIOS.mm,在160多行左右把之前的;改为上面提到的播放video的视图 addSubview:self.moviePlayer.view];
4.在AppDelegate.cpp文件中添加glClearColor(0, 0, 0, 0);以透明的方式清空后台缓冲。
这样就能实现如图的效果了,在一些特殊的场合也许用的上,另外提到一点,如果需要播放视频去掉系统自带的控件,仍然需要改一下UIVideoPlayerIOS.mm这个文件的代码,初始化时把默认的风格改一下,添加下句self.moviePlayer.controlStyle = MPMovieControlStyleNone;
消灭零回复。