我有一个CCLayer与我的应用程序的开始菜单,我想在后台播放一部短片.我已经成功地在glView中播放了一部电影,但是当它播放时,菜单没有被描绘出来.为了处理电影,我实例化了一个MPMoviePlayerController然后我以这种方式将它的视图添加到glView:
[[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view];
Run Code Online (Sandbox Code Playgroud)
我看到这个问题非常相似
但我想知道是否有更好的解决方案,可能会让我仍然利用cocos2d框架实体(而不是我自己的观点).
我试图以这种方式发送moviePlayer.view
[theView sendSubviewToBack:moviePlayer.view];
Run Code Online (Sandbox Code Playgroud)
但菜单仍被电影隐藏......
(很多个小时后..)
好的,你可以在第一个评论中读到我已经意识到(可能)唯一的方法是利用自定义视图.我这样做了,它通过在moviePlayer.view之后向glView添加任何视图在模拟器中运行.然而,当我在3.1.3 FW的目标IPod触摸上运行它时,电影视图始终位于顶部.因此我意识到MPMoviePlayerController实际上创建了自己的窗口和自己的视图.一些帖子(比如Streaming MPMoviePlayerController顶部的Overlay)建议拦截加载新窗口的事件,然后才添加子视图.
这就是我试图做的事情,但该事件实际上从未在模拟器上或在目标Ipod上捕获.因此我添加了一个预定的选择器 - (void)更新,它以这种方式实现:
-(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];
}
}
Run Code Online (Sandbox Code Playgroud)
但这部电影仍然保持领先
请大家帮忙,非常感谢!
(几天后......)我还等了2秒,电影实际上正在运行,将我的徽标视图添加为电影播放器的子视图.它在模拟器上正常工作,但在Ipod(3.1.3)上,它得出了不同的结果.第一次播放电影时,未显示徽标(电影在顶部).然而,因为一旦电影结束,播放方法就被整理,从第二次开始,在背景上用电影描绘徽标(是我愿意).这对你有意义吗?
我真的需要了解如何解决这个问题,我在2个月内成功开发游戏是非常荒谬的,现在我在开始菜单中被困2周了:)
无论如何,如果我已经决定粘贴我试图修复的图层的整个代码,以便您可以更好地弄清楚问题是什么(或者至少这是我的希望:))
+(id) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' …Run Code Online (Sandbox Code Playgroud)