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