VideoPlayerに出会った問題たち
インデックス
一、ムービーの上にウィジェットを置けない問題
1.ムービーのビューはcocosのビューではなく、System widgetに配置されており、さらにムービービューが常にトップに固定されているため、ZOrderの調整を行っても変更が反映されない。。。(ZOrderの変更はcocosのビューに対して行うもの)
(たまにZOrderを調整すれば動くと書いてるサイトを見かけるが、それは多分間違ってる。。。)
(ビューのトップ固定を解除したら動くかもしれないが。。。試したことないので機会があればやってみる)
Androidの場合はUIVideoPlayer_android.cppで、iOSの場合はUIVideoPlayer_iOS.mmを参照しており、それぞれ動かしたいのであれば、どっちも対応する必要がある。
■解決法
・iOS
1.新規ルートビューをつかし、動画ビューやcocosビューをそれぞれルートビューに追加する
AppController.mm
_viewController.view.backgroundColor = [UIColor clearColor]
先ずはビューコントローラーの透明度を追加する
UIView* videoView;
次はappController.hに新しいビデオビューを追加する
_viewController.view.tag = 3;
UIViewController* uiVC = [[UIViewController alloc] initWithNibName:nil bundle:nil];
uiVC.view.frame = [UIScreenm
ainScreen].bounds;
_videoView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen]bounds] ];
_videoView.tag = 1;
[uiVC.view addSubview : _videoView];
[uiVC.view addSubview : _viewController.view];
// Set RootViewController to window
if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
[window addSubview : uiVC.view];
}
else
{
// use this method on ios6
[window setRootViewController : uiVC];
}
UIVideoPlayer_ios.mm
2.VideoPlayerのデフォルトビューを新規ルートビューに変更
[[[eaglview superview] viewWithTag:10] addSubView:self.moviePlayer.view];
3.エンジンのデフォルトピクセルフォームを変更する
pixelFormat = PixelFormat::RGBA8;
1.ムービービューのトップ固定を解除
Cocos2dxVideoHelper.java
//videoView.setZOrderOnTop(true);
2.ムービービューに透明度を付与
AppActivity.java
二、ムービー機能のマルチ対応
異なるソースファイルを参照しているため、機能が統一していない。。。
→画面をクリックして一時停止Or再開
・iOS
→スキップボタン
ダブルクリックして画面拡大
■解決方法
VideoPlayerの機能を使用せず、自ら機能を実装する。
1.VideoPlayerのタッチ反応を遮断する
videoPlayerの基本機能のタッチを反応するかの方を使用する。
2.機能実装
三、Windowsに対応していない問題
VideoPlayerはWindowsに対応していないため、位置の調整とか、画面をフルスクリーンにするかを変更した場合、Windowsでは確認できないので、実機にビルドするしかない。。。(超時間かかる)
四、ムービーの配置問題
フルスクリーンを指定した場合は動画ビューのサイズや位置に関係なく、画面いっぱいに表示されます。
フルスクリーンを指定しない場合に、ビューの位置を知るためにはGetVisibleOriginを使用してゲットできる。