Box2D твердые тела искажаются при загрузке другого вида - PullRequest
0 голосов
/ 17 февраля 2011

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

Буду признателен за любую помощь или идеи, которые кто-либо может иметь.

1 Ответ

0 голосов
/ 23 февраля 2011

Вместо того, чтобы помещать контроллер меню в контроллер навигации и затем добавлять контроллер навигации в представление, я вместо этого использовал 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];

Кажется, что NavigationBar разбивал изображения?Я хотел бы рассмотреть это подробнее, так как навигационная панель может быть удобной вещью, но у меня сейчас нет времени, что, вероятно, означает, что я никогда не обойду ее.

...