我正在尝试用仅支持横向模式的iPad应用程序填充我的SKScene瓷砖。在场景中,我发现了h&如此:
int h = [UIScreen mainScreen].bounds.size.height;
int w = [UIScreen mainScreen].bounds.size.width;
不幸的是,发回的尺寸与他们需要的尺寸相反。在视图控制器或视图的内容中讨论此问题有很多主题,解决方案似乎是在viewWillAppear中检测屏幕大小,而不是在viewDidLoad中。但是,这似乎不是SKScenes的有效解决方案。
有什么建议吗?
答案 0 :(得分: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];
}
}
答案 1 :(得分:10)
在布局处理程序中初始化场景没有意义。 调整布局处理程序中的场景。 (这就是它的用途。)
@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
以将所有内容移动到正确的位置。
万岁,现在你的游戏也处理设备轮换。