从 SKScene 内部设置屏幕方向

Setting screen orientation from inside SKScene

我的游戏是在单个 SKScene 对象中实现的。一个按钮 (SKSpriteNode) 让用户可以从横向模式切换到纵向模式。嗯,它应该。但我无法完成这项工作。对此有很多讨论,但都比较复杂,给出的建议也截然不同。

那么....在 SKScene 中制作一个按钮以将方向更改为纵向或横向的最简单方法是什么?

如有任何建议,我们将不胜感激。

这是对我发布的问题的简短、完整的回答。

  1. 在xcode,selectFile->New->Project->IOS->Application->Game生成一个默认的app框架IPad 使用 SpriteKit 和 ObjectiveC 的游戏。这是 classic HelloWorldApp,只要您触摸屏幕就会出现旋转的飞机。

  2. 在 Targets->DEploymentInfo->DeviceOrientation 中,选中 Portrait 和 LandscapeLeft

  3. 像这样修改视图控制器的 shouldAutorotate...

    - (BOOL)shouldAutorotate
    {
        int currentOrientation = (int)[[UIDevice currentDevice] orientation];
        if (scene.orientation != currentOrientation) {
            // Rotate the device back to orginial orientation
            [[UIDevice currentDevice] setValue:
             [NSNumber numberWithInteger: scene.orientation]
                                        forKey:@"orientation"];
            return NO;
        }
        return YES;
    }
    
  4. 在你的 gameScene 中改变 touchesBegan 的主体 class 像这样...

    -(void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
          /* Called when a touch begins */
            NSLog(@"%d", self.orientation);
            if (!self.orientation ||  self.orientation == UIInterfaceOrientationPortrait) {
                self.orientation = UIInterfaceOrientationLandscapeLeft;
            } else {
                self.orientation = UIInterfaceOrientationPortrait;
            }
            [[UIDevice currentDevice] setValue:
             [NSNumber numberWithInteger: self.orientation]
                                        forKey:@"orientation"];
    

应用程序将在每次点击时保持方向。