SpriteKit屏幕大小 - 如何在真实手机上获得正确尺寸的图像?

时间:2015-01-12 23:07:46

标签: ios objective-c sprite-kit

为什么我的应用程序在我的真实手机上运行时看起来与模拟器不同?

我正在使用spritekit制作游戏。当我在iPhone 5模拟器中测试它时,屏幕的大小和图像的大小正如我想要的那样,但是当我在我的实际iPhone 5上运行程序时,图像显示太大,部分屏幕的顶部和底部被切断,屏幕的左右两侧不会一直延伸到手机的两侧 - 屏幕上从左到右都有一个信箱效果。

我的所有图像都以@ 2x命名,所以它们应该与视网膜屏幕一起使用。这是我在初始化SKScene时使用的与屏幕尺寸相关的代码:

GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
scene.size = self.view.frame.size;
scene.scaleMode = SKSceneScaleModeAspectFill;

我已经尝试了每个可用的SKSceneScaleModes,但没有一个能帮助他们 - 他们每个人都给出了一个看起来并不正确的不同结果。我之所以使用AspectFill,只是因为该模式在模拟器中可以正常工作。

我也尝试过这样的屏幕大小,就像尝试一样,但这并没有帮助:

GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
CGRect screenRect = [[UIScreen mainScreen] bounds];
scene.size = screenRect.size;

提前致谢。

1 个答案:

答案 0 :(得分:0)

确实是因为我的设备在ios 7上时模拟器正在模拟ios 8.当你进入横向模式(我的游戏的原生模式)时,ios 8会自动改变坐标系,而ios 7则不。一旦我想出来,修复很简单 - 只检测设备正在运行的操作系统,如果它低于ios 8,则交换屏幕的高度和宽度尺寸:

if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) {
    CGSize fixedSize = CGSizeMake(screenRect.size.height, screenRect.size.width);
    scene.size = fixedSize;
}
else
    scene.size = self.view.frame.size;