У меня есть мир 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];
И вот где контроллер представления игры загружается делегатом приложения в приложении 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, но безрезультатно (я просто предположил).
Буду признателен за любую помощь или идеи, которые могут быть у кого-то.