iOS 7+ 中如何让 cocos2d-x 游戏一直显示 [白底黑字] 的状态条?

2015-11-26 14:49:02 +08:00
 xpol

需求

我现在需要让我的 cocos2d-x 游戏一直显示白底黑字的状态条。

实现

根据这篇文章,我的做法如下:

Info.plist

AppController.mm

frameworks/runtime-src/proj.ios_mac/ios/AppController.mm 中的 application:didFinishLaunchingWithOptions: 添加如下代码(完整代码见后面)。

[[UIApplication sharedApplication].statusBarStyle:UIStatusBarStyleDefault];
[[UIApplication sharedApplication] setStatusBarHidden:NO];

// The OpenGLWindow
_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];

RootViewController.mm

- (BOOL)prefersStatusBarHidden
{
    return NO;
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleDefault;
}

问题

由于上提到的参考 文章 是显示的黑底白字的状态条,然而我的需求是白底黑字
最终产生的结果如下:

上面的黑色部分其实就是状态条,只是背景(由于窗口被下移,没有绘制那块区域)也是黑色的,所以就黑成一团了。

cocos2d-x 提供的模板,是这样创建 _window 的:

_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];

我根据上面的文章,将窗口下移,我修改后的代码:

_window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];

UI 是这样的结构(完整代码见『附』):

如上图,黄色为标识区域为 StatusBar
红色标识区域为_window
_window 内部为 [_window]---rootViewController--> [viewController] ---view--> [eaglView]

eaglView 是最终 cocos2d-x 绘图的区域,他填满整个 _window

现在我想要的结果是让上图的黑色区域底色变成白色,由于我不懂 iOS ,我猜想的方案可能是:

大致就是这些,请大家指点下我,最好有代码。我不熟悉 iOS 开发。

感谢了!

application:didFinishLaunchingWithOptions 完整代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    cocos2d::Application *app = cocos2d::Application::getInstance();
    app->initGLContextAttrs();
    cocos2d::GLViewImpl::convertAttrs();

    // Override point for customization after application launch.

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];

    // Add the view controller's view to the window and display.
    _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
    CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [self.window bounds]
                                     pixelFormat: (NSString*)cocos2d::GLViewImpl::_pixelFormat
                                     depthFormat: cocos2d::GLViewImpl::_depthFormat
                              preserveBackbuffer: NO
                                      sharegroup: nil
                                   multiSampling: NO
                                 numberOfSamples: 0 ];

    [eaglView setMultipleTouchEnabled:YES];

    // Use RootViewController manage CCEAGLView
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;
    viewController.view = eaglView;

    // Set RootViewController to window
    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
    {
        // warning: addSubView doesn't work on iOS6
        [self.window addSubview: viewController.view];
    }
    else
    {
        // use this method on ios6
        [_window setRootViewController:viewController];
    }

    [_window makeKeyAndVisible];


    // IMPORTANT: Setting the GLView should be done after creating the RootViewController
    cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView);
    cocos2d::Director::getInstance()->setOpenGLView(glview);


    app->run();
    return YES;
}
2005 次点击
所在节点    iDev
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/239103

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX