0

我想在我的应用程序中使用 kobold2d 库在 UIKit GUI 元素之外包含 cocos2d 场景,所以它应该只占屏幕的一部分。

我在初始化第一层时像这样改变 cocos2d glview 的大小:

UIView * glView = [[CCDirector sharedDirector]view];
    CGRect rct = CGRectMake(100, 100, 300, 400);

    [glView setFrame:rct];

在我改变方向之前,视图会正确显示,然后 glview 再次变为全屏。有没有办法禁用这种行为?

XCode 4.5.2、iOS 6、Kobold2D 2.04

4

2 回答 2

0

设置框架后调用 reshape 可能会有所帮助:

UIView * glView = [[CCDirector sharedDirector]view];
CGRect rct = CGRectMake(100, 100, 300, 400);

[glView setFrame:rct];
[glView reshape];
于 2013-01-23T12:04:18.673 回答
0

现在经过一些实验,我找到了解决方案,如果我错了,请纠正我。至少这对我有用,希望其他人也可以使用它。

CCDirectorIOS 是一个 UIViewController,它通常被设置为rootViewControllerapp的一个window

Looks like[window rootViewController]负责在view每次方向更改时使其全屏显示,从而迫使所有孩子进行布局(我知道!!!%)。

因此,为了避免 glView 不时收缩到整个窗口,给窗口另一个 UIViewController 作为 rootController,而不是 CCDirector。另一个 UIViewController 应该有它自己的全新 UIView。这个新的 rootView 是这个 rootViewController 可以随心所欲地调整大小的东西,不用管我们的 glView。现在,将director 指定为rootController 的子级,并将glView 指定为rootView 的子级。

将 glView 设置为您想要的大小 - 我们开始吧!现在,当 rootView 调整大小时,glView 不会。在我的情况下,它仍然必须在保持可用空间比例的同时调整大小,所以我在它上面使用了 setAutoresizingMask。请大师告诉你的想法。

已知警告:

  • KKAppDelegate 的 rootController 和 navController 不使用,除了正确的初始方向

  • 由于 addChildViewController: 方法,这将最低 ios 版本的标准提高到 5

应用程序 AppDelegate 中的代码(假设 ARC 为 ON):

-(void) initializationComplete
{
#ifdef KK_PLATFORM_IOS

    RootViewController * rootvc = [[RootViewController alloc]init];
    UIView * rootView = [[UIView alloc]init];
    [rootvc setView:rootView];
    [rootvc.view setBackgroundColor:[UIColor blueColor]];//to see views in colors
    [window setRootViewController:rootvc];

    [rootvc addChildViewController:[CCDirector sharedDirector]];

    UIView * glview = [[CCDirector sharedDirector]view];
    [rootvc.view addSubview:glview];//[[CCDirector sharedDirector]openGLView]];

    CGRect glRect = CGRectInset(rootvc.view.bounds, 50, 50);//our glview frame is smaller than rootView frame

    [glview setFrame:glRect];
    [glview setAutoresizingMask: UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];//so the view size follows window's size even though it's not fullscreen

#endif

}
于 2013-01-24T13:57:50.130 回答