我有一个很棒的Box2D世界。我在一个简单的iOS游戏中使用它,用户倾斜设备以推动屏幕周围的物体在某个物体与另一个物体发生碰撞时堆积点。
当它在我的应用程序中在测试控制器中深埋几层时工作正常。我从菜单屏幕上的一个按钮调用它,游戏屏幕上的一个按钮将通过popToViewController返回菜单。但是一旦我看到它有多棒,我就意识到我希望游戏成为用户看到的第一个屏幕(在默认加载图像之后)。因此,现在该应用程序可以加载世界,并且游戏即将完成,没有任何问题。
直到用户点击菜单按钮才能进入菜单屏幕 - 另一个视图控制器。菜单控制器加载正常,一切都按预期工作。但是,当点击后退按钮返回游戏/世界时,图像/物体会扭曲。当菜单控制器被推入导航堆栈时,失真取决于它们是如何旋转的。有时它们会变大,有时也会被弄脏。
我在加载菜单控制器时尝试暂停世界(通过不调用Step),但这对图像失真问题没有帮助。
以下是加载菜单控制器的代码:
//unhide the navbar for the next screen
[self.navigationController setNavigationBarHidden:NO];
MenuViewController *mvc = [[MenuViewController alloc]init];
[self.navigationController pushViewController:mvc animated:YES];
[mvc release];
以下是应用程序中的app delegate加载游戏的视图控制器didFinishLaunchingWithOptions:
B2DViewController *b2dvc = [[B2DViewController alloc]init];
UINavigationController *navcon = [[UINavigationController alloc] init];
[navcon setNavigationBarHidden:YES];
[navcon pushViewController:b2dvc animated:NO];
[window addSubview:navcon.view];
[b2dvc release];
[window makeKeyAndVisible];
图像通过xib进入。一个是按钮,一个是imageView。两者都被添加到动态主体中,这些主体是这样配置的:
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(boxDimensions.x, boxDimensions.y);
...
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 3.0f;
fixtureDef.friction = 0.3f;
fixtureDef.restitution = 0.5f;
...
我试图隐藏所有子视图,但是,正如您可能怀疑的那样,只是将它们隐藏起来,而不是来自失真的力量。我也关闭了IB中的所有拉伸和调整大小的东西,但没有用(我只是在猜测)。
我很感激任何人可能提供的任何帮助或想法。
答案 0 :(得分:0)
不是将菜单控制器推到导航控制器上,然后将导航控制器添加到视图中,而是使用presentModalViewController:animated。这没有解决问题,但一旦我注释掉了[self.navigationController setNavigationBarHidden:NO];问题解决了。
//unhide the navbar for the next screen
//[self.navigationController setNavigationBarHidden:NO];
MenuViewController *mvc = [[MenuViewController alloc]init];
[self presentModalViewController:(UIViewController *)mvc animated:YES];
[mvc release];
导航栏似乎粉碎了图像?我想进一步研究这个,因为导航栏可以是一个方便的东西,但我现在没有时间,这可能意味着我永远不会解决它。