6

我正在尝试在仅支持横向模式的 iPad 应用程序中用瓷砖填充我的 SKScene。在场景中,我检测到 h & w 是这样的:

int h = [UIScreen mainScreen].bounds.size.height;
int w = [UIScreen mainScreen].bounds.size.width;

不幸的是,发回的尺寸与它们需要的尺寸相反。SO在视图控制器或视图的内容中讨论这个问题有很多主题,解决方案似乎是在viewWillAppear中检测屏幕大小,而不是在viewDidLoad中。然而,这似乎不是 SKScenes 的有效解决方案。

有什么建议么?

4

2 回答 2

12

尝试,不使用viewDidLoad和使用这个

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    SKView * skView = (SKView *)self.view;
    if (!skView.scene) {
        skView.showsFPS = YES;
        skView.showsNodeCount = YES;

        SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
        scene.scaleMode = SKSceneScaleModeAspectFill;

        // Present the scene.
        [skView presentScene:scene];
    }
}
于 2013-10-14T06:41:15.253 回答
11

在布局处理程序中初始化场景是没有意义的。在布局处理程序中调整场景大小。(这就是它的用途。)

@implementation SGOMyScene
{
    SKScene *scene;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    SKView *skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    scene = [SGOMyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [skView presentScene:scene];
}

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    SKView *skView = (SKView *)self.view;
    scene.size = skView.bounds.size;
}

您的场景应该实施- (void)didChangeSize:(CGSize)oldSize以将所有内容移动到正确的位置。

万岁,现在您的游戏也可以处理设备旋转了。

于 2014-02-02T21:22:45.750 回答