【问题标题】:SpriteKit screen size--how to get the correct size of images on a real phone?SpriteKit 屏幕尺寸——如何在真机上获得正确尺寸的图像?
【发布时间】:2015-01-13 07:57:46
【问题描述】:

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

我正在使用 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;

提前致谢。

【问题讨论】:

  • 注意,我的手机运行的是 ios 7,而模拟器正在模拟 ios 8。从我做的一些进一步阅读来看,这可能与问题有关。我希望该应用程序向后兼容 ios 7,所以我仍然希望解决这个问题。任何想法都非常感谢。

标签: ios objective-c sprite-kit


【解决方案1】:

确实是因为当我的设备在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 2014-03-07
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多