SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决

Posted 大熊猫侯佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决相关的知识,希望对你有一定的参考价值。

一个SpriteKit项目在其他设备上运行都无问题(无论是真机或是模拟器),但是在iPhone6 Plus上会出现精灵对象纹理被过度放大的现象:

这里写图片描述

从上图中大家可以看到无论是主角或是道具球都过大了.

看了一下精灵图片是放在atlas纹理集文件夹中的:

这里写图片描述

可以看到PowerUp和Player都有对应缩放的版本:Player.png,Player@2x.png以及Player@3x.png.

在各个图片的属性中检查图片的尺寸也都正确,看不出神马问题…

找到SKSpriteNode对象初始化的代码看看:

let orbNode = SKSpriteNode(imageNamed: "PowerUp")

貌似也没什么问题…突然想到上述图片都放在纹理集中,那么都应该被Xcode做过附加操作以形成额外的整张图片,是不是这里出了问题?

将Player共3张图片放到Assets.xcassets中:

这里写图片描述

PowerUp也如法炮制,然后再次编译运行代码,这回所有精灵的尺寸都是正确的了,没有发生放大的情况!看来@x后缀只对直接的图片资源有效,因为原来你是将图片放到纹理集中,所以系统处理就会出错.

但如果我只想用纹理集

以上是关于SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 迁移错误:在 SKSpriteNode 的指定初始化器中不能再传入 nil

Swift - 必须调用超类 SKSpriteNode 错误的指定初始化程序

SKSpriteNode 在 GameScene 中消失

SKSpriteNode 在 init(NSCoder) 中设置颜色

如何创建固定大小的对象数组

移动时如何访问 SKSpriteNode 子类的对象(Swift)