私のアプリのスタートメニューにCCLayerがあり、バックグラウンドでショートムービーを再生したいと考えています。 私はglViewで映画を再生することに成功しましたが、再生時にはメニューが表示されません。私はこの質問をcocos2d:メニューの背景でビデオを再生する
How to have a menu when a movie is playing-iphone cocos2d
かなり類似していたが、私は希望の見てきた
[[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view];
:私はMPMoviePlayerController をインスタンス化し、その後、私はglViewにこの方法をそのビューを追加動画を処理するために より良い解決策があるかどうか、おそらく私がcocos2dフレームワークエンティティを利用できるようにする(おそらく私自身の見解ではない)かも知れません。
私は...
(多くの時間後に...)
を[theView sendSubviewToBack:moviePlayer.view];
この方法をバックアップするmoviePlayer.viewを送信しようとしたが、メニューがSTIL映画によって隠されています
あなたが最初のコメントを読むことができるように、(おそらく)唯一の方法はカスタムビューを悪用していることに気がつきました。私はそれを行い、moviePlayer.viewの後にglViewに任意のビューを追加してシミュレータで実行します。しかし、3.1.3 FWのターゲットIPodタッチで実行すると、ムービービューは常に上に表示されます。 私は、MPMoviePlayerControllerが実際に独自のウィンドウと独自のビューを作成することを認識しました。いくつかの投稿(このようにOverlay on top of Streaming MPMoviePlayerController)は、新しいウィンドウがロードされたイベントをインターセプトし、サブビューを追加することを推奨します。
これは私がやろうとしたものですが、そのイベントは実際にはシミュレータ上でもターゲットIpod上でも決して捕まえられません。
-(void) update{
NSArray *windows = [[UIApplication sharedApplication] windows];
if ([windows count] > 1)
{
UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
UIView *theView = [[CCDirector sharedDirector] openGLView];
[logo setCenter:ccp(240,80)];
[moviePlayer.view addSubview:logo];
[self unscheduleAllSelectors];
}
}
が、映画はまだすべてのヘルプは非常に感謝ですトップ
してください男の上に残っています:この方法で実装されている(無効)更新 - 私は、スケジュールセレクタを追加しているので!
(数日後...) ムービーが実際に実行されている間に、ロゴ表示をムービープレイヤーのサブビューとして追加するために2秒間待っています。それはシミュレータ上で正しく動作しますが、iPod(3.1.3)では別の結果が得られます。初めて映画が再生されるとき、ロゴは描かれません(上の映画)。しかし、映画が終了するとすぐに、再生メソッドは、ロゴがバックグラウンドで映画に描かれる2回目から始まります(私はそうです)。あなたには意味がありますか?
は、私は本当にそれは私が2ヶ月でゲームを開発するのに非常にばかげsuccededている。この問題を解決する方法を理解する必要があり、今私が持っている場合はとにかくスタート]メニュー:)
のために2週間から立ち往生しています私はあなたがより良い問題が何であるかを把握することができるように修正しようとしている層の全体のコードを貼り付けることにしました。この私にいくつかの時間を過ごした後
+(id) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' is an autorelease object.
StartMenu *layer = [StartMenu node];
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
-(void) update{
timer ++;
if (timer==120){
UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"stupidLogo.png"]];
UIView *theView = [[CCDirector sharedDirector] openGLView];
[logo setCenter:ccp(240,80)];
//logo.transform = CGAffineTransformMakeRotation(3.14/2);
[moviePlayer.view addSubview:logo];
[self unscheduleAllSelectors];
}
}
-(id) init{
self = [super init];
[self schedule: @selector(update)];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test_005_conv_06.mp4" ofType:@""]];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];
if ([moviePlayer respondsToSelector:@selector(view)]) {
if([MPMoviePlayerController instancesRespondToSelector:@selector(view)]){
// Use the new 3.2 style API
moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.shouldAutoplay = FALSE;
// This does blows up in cocos2d, so we'll resize manually
// [moviePlayer setFullscreen:YES animated:YES];
[moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)];
CGSize winSize = [[CCDirector sharedDirector] winSize];
moviePlayer.view.frame = CGRectMake(0, 0, winSize.height, winSize.width); // width and height are swapped after rotation
[[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view];
[moviePlayer play];
}
} else {
// Use the old 2.0 style API
moviePlayer.movieControlMode = MPMovieControlModeHidden;
[moviePlayer play];
}
return self;
}
- (void)moviePlayBackDidFinish:(NSNotification*)notification {
MPMoviePlayerController *moviePlayer = [notification object];
[moviePlayer play];
}
私はこれを見つけました:http://www.cocos2d-iphone.org/forum/topic/61 imageViewがopenGLViewに追加されたため、「cocos2dがそうであるようです。 UIオブジェクトに描画しないでください。そうするための唯一の方法は、標準のUIメソッドを使用することですが、アニメーションが含まれている場合はcocos2dとして便利ではありません。出来ますか?それは醜いかもしれない... – Sindico