iPad 和 iPhone 之间的 SpriteKit 坐标不同

SpriteKit Coordinates differ between iPad and iPhone

我有一个非常简单的 SpriteKit 场景,它的行为与我预期的不同。这是一个通用应用程序,我用来在场景中绘制单个红色方块的代码如下:

    let redSquare = SKSpriteNode(color: UIColor .redColor(), size: CGSizeMake(100.0, 100.0))
    redSquare.anchorPoint = CGPointMake(0.0, 0.0)
    redSquare.position = CGPointMake(1.0, 1.0)
    addChild(redSquare)

此代码位于 xCode 在您 select SpriteKit 游戏时为您创建的默认应用程序的 GameScene didMoveToView 方法中。

当 运行 在 iPad 上时,它的行为与预期的一样,将红色方块从屏幕底部和左边缘绘制 1 磅。

当我在 iPHone 6 Plus 模拟器上 运行 它时,它显示如下:

宇宙飞船出现在两个设备上的正确触摸点,但是触摸位置的 println() 在 iPad 上显示 (1,1),在 iPhone 上显示 (1,100) . 这表明 (x,0) - (x,99) 的坐标不在 iPhone 屏幕的底部,这对我来说完全没有意义。

为什么两台设备显示不一样?模拟器和实际设备上的行为相同。

谢谢! 滑板车

这是因为 iPhone 上的屏幕尺寸不正确导致的 - 查看场景的 sks 文件,您应该看到场景的尺寸默认设置为 (1024, 768) .要更正此问题,您需要设置场景大小和缩放模式:

scene.size = skView.bounds.size
scene.scaleMode = .AspectFill

您应该在 didMoveToView 或实例化场景时执行此操作。