我正在使用Ben Gottlieb's Twitter-OAuth-iPhone将this tutorial代码集成到我的cocos2d 0.99.5项目中。我在使视图控制器正确加载方面遇到了一些困难。我以前从未将cocos2d与标准的Cocoa Touch UI混合在一起,而且我有点超出了我的深度。
当我连接到Twitter时,我在我的应用代理中调用以下代码:
-(void) twitterAccountLogin
{
UIViewController *controller = nil;
if (!_engine) {
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];
_engine.consumerKey = kOAuthConsumerKey;
_engine.consumerSecret = kOAuthConsumerSecret;
controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];
}
if (controller) {
[[CCDirector sharedDirector] stopAnimation];
[viewController presentModalViewController:controller animated:YES];
[controller release];
return;
}
}
当调用它时,创建Twitter UIViewController
,它在屏幕上动画,然后,一旦完成动画(即它到达屏幕顶部),它就会消失。当前正在运行的CCScene
重新出现,但它不响应触摸。在模拟器上,屏幕变黑,而不是重新出现的运行场景。如果不清楚,viewController
是最近在0.99.5中添加到cocos2d的RootViewController
。
在我看来,UIViewController
正在创建,然后以某种方式在运行场景下绘制,但调试让我无处可去。我哪里出错?
答案 0 :(得分:0)
你的视图控制器应该是这样的:
[[[CCDirector sharedDirector]openGLView] addSubview: viewController.view];
[viewController presentModalViewController: controller animated:YES];
答案 1 :(得分:0)
在这里和cocos2d论坛上寻求帮助之后,这就是我最终要做的事情。
-(void)pauseMenuButtonPressed
{
if(!paused)
{
paused = TRUE;
[[CCDirector sharedDirector] pause];
CGSize s = [[CCDirector sharedDirector] winSize];
pauseLayer = [CCColorLayer layerWithColor: ccc4(150, 150, 150, 125) width: s.width height: s.height];
pauseLayer.position = CGPointZero;
[self addChild: pauseLayer z:8];
CCMenuItem *pauseMenuItemResume =[CCMenuItemImage itemFromNormalImage:@"menuItemResumeSmall.png"
selectedImage: @"menuItemResumeSmallSelected.png"
target:self
selector:@selector(pauseMenuResumeSelected)];
CCMenuItem *pauseMenuItemMainMenu =[CCMenuItemImage itemFromNormalImage:@"menuItemMainMenuSmall.png"
selectedImage: @"menuItemMainMenuSmallSelected.png"
target:self
selector:@selector(pauseMenuExitToMainMenuSelected)];
// Create the pause menu and add the menu items to it
pauseMenu = [CCMenu menuWithItems:pauseMenuItemResume, pauseMenuItemMainMenu, nil];
// Arrange the menu items vertically
[pauseMenu alignItemsVertically];
// add the menu to the scene
[self addChild:pauseMenu z:10];
[hudButtons setIsTouchEnabled:NO];
}
}
简而言之,我不是为暂停菜单推送新场景,而是暂停游戏中的所有操作,创建透明层以覆盖屏幕,然后在其上显示菜单。这似乎是在cocos2d中处理这个问题的传统方法,至少从0.99.5开始(这是游戏目前正在运行的)。