2011年6月26日日曜日

CCVideoPlayerで画像をオーバレイ表示してみる

cocos2d-extensionsにCCVideoPlayerというクラスがあり、これは、動画を流しながらcocos2dのスプライトなどを表示することができるのでは?と期待しましたが、そんなに甘くなかったようです。

サンプルプログラムCCVideoPlayerTestを見てみると、
keyWindow上に、
   VideoOverlayView
   MPMovieView
   EAGLView
という階層でUIViewが乗っかっているようです。
ただし、これはOS4.0以降の場合です。
OS3.1の場合は、
   VideoOverlayView
   MPSwapableView
という階層になります。
頑張ればCCDirectorが乗るEAGLViewを上に持ってきてゴニョゴニョ…で、
cocos2dのスプライトやらが使えそうですが、おとなしくUIKitを使うことにしました。
取りあえず以下のコードでビットマップ画像のオーバレイ表示ができました。
ソースのCCVideoTestLayer.mを改造してみました。


- (void) test2CCVideoPlayer
{
[CCVideoPlayer playMovieWithFile: @"OP_MEDETAI-NIGHT.m4v"];
// VideoOverlayView上にビットマップ画像をオーバレイさせる
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toko_back_small01.png"]];
[imageView setCenter:ccp(240, 80)];
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
NSArray *array = [keyWindow subviews];
NSString *str;
id target;
for (target in array) 
{
str = NSStringFromClass([target class]);
if ([str isEqualToString:@"VideoOverlayView"]) 
{
[(UIView *)target addSubview: imageView];
[imageView release];
CGAffineTransform transformRotate = CGAffineTransformRotate(CGAffineTransformIdentity, M_PI/2);
imageView.transform = transformRotate;
break;
}
}

/*
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
img.center = CGPointMake(videoView.center.x, videoView.center.y);
img.alpha = 0.0;
[UIView commitAnimations];
*/
//
}