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 游戏:纵向模式下的世界,横向模式下的战斗?的主要内容,如果未能解决你的问题,请参考以下文章

从父级(Sprite Kit)目标 C 中移除节点

纵向模式下的相机横向预览

Touch Function 方法中的多个函数 Sprite Kit

iOS 8 横向纵向模式下的自定义键盘

UIScrollView 在纵向模式和横向模式下的行为不同

将 Android DialogFragment 显示为纵向模式下的对话框和横向模式下的活动的一部分