Sprite Kit 游戏:纵向模式下的世界,横向模式下的战斗?
Posted
技术标签:
【中文标题】Sprite Kit 游戏:纵向模式下的世界,横向模式下的战斗?【英文标题】:Sprite Kit game: over world in Portrait mode but battles in Landscape mode? 【发布时间】:2015-06-19 09:29:21 【问题描述】:到目前为止,游戏以纵向加载:所以主菜单是纵向的,然后游戏主世界(玩家角色在其中漫游的地方)也是纵向的。但是我需要在角色开始战斗时将方向更改为横向模式(此外,当玩家在战斗模式下转动手机时,我不希望手机更改方向并意外将所有内容更改回纵向模式,反之亦然) .战斗模式是另一种在某些触发器上呈现的 SKScene。如何将新呈现的 SKScene 的方向更改为横向?我可以在单个 SKScene 中还是仅在 View Controller 中执行这些更改?这是当前视图控制器代码,关于方向:
-(BOOL)shouldAutorotate
return YES;
-(NSUInteger)supportedInterfaceOrientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
return UIInterfaceOrientationMaskAllButUpsideDown;
else
return UIInterfaceOrientationMaskAll;
这是战斗 SKScene 中的当前代码 - 我想强制进入横向模式的代码(结果非常丑陋,因为战斗场景以横向加载但视图控制器仍然认为我们处于纵向...另一个问题是,如果我以任何方式旋转手机,方向会自动旋转。我需要固定方向以重新调整手机移动):
-(void)didMoveToView:(SKView *)view
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
【问题讨论】:
【参考方案1】:这是一个问题,因为您只能在您的应用设置中已允许的情况下手动更改应用的方向。例如,如果您只检查纵向模式,但后来想转到横向模式,则不能这样做。
要将方向更改为例如向左横向,您可以使用:
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
【讨论】:
我在场景的 -(void)didMoveToView:(SKView *)view 方法中尝试了您的代码。状态栏不会旋转到 LandscapeLeft。我在我的应用程序的目标中检查了纵向、横向左侧和横向右侧。甚至 'shouldAutorotate' 也会返回 YES。我什至试过 NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; [[UIDevice currentDevice] setValue:value forKey:@"orientation"];视图确实转到横向,但视图控制器仍然认为我们处于纵向,因此整个游戏看起来是倾斜/拉伸的。 我想知道如何强制场景的视图控制器相信设备处于特定方向,而不管物理手机如何旋转...... @Krekin- 也许这是必须在 viewController 中调用调用而不是 SKScene 的情况。尝试使用 NSNotification 来做到这一点。 不。依然没有。这是一个无赖。一半的游戏依赖于战斗模式,但如果我无法在横向模式下显示其场景,我将无法使用它。 @Krekin- 我不知道你的代码,所以这可能不可行,但如果可能的话,从布局的角度来看,你可以将节点旋转 90 度。以上是关于Sprite Kit 游戏:纵向模式下的世界,横向模式下的战斗?的主要内容,如果未能解决你的问题,请参考以下文章