我正在开发一个简单的游戏应用程序,遇到了一个非常奇怪的缩放问题。我扩展了SKSpriteNode,使其成为我游戏世界中的一个障碍。该障碍物的@1x、@2x和@3x图像都设置在资源中。xcassets
我的问题是,无论我加载什么样的纹理并将其传递到super。init最终正好是我实际图像大小的50%。因此,就好像它在使用@n-1x值,尽管它不是(通过删除@1x和@3x图像进行测试来确认)。
代码:
import SpriteKit
class Obstacle: SKSpriteNode {
init(imageNamed: String, type: UInt32, xPos: CGFloat = 0, yPos: CGFloat = 800) {
let texture = SKTexture(imageNamed: imageNamed);
super.init(texture: texture, color: SKColor.clear, size: texture.size();
}
}
我正在@2x设备上进行测试,并在阅读了SKTexture之后进行测试。size()文档我看到它以点而不是像素返回大小值,所以我创建了以下解决方法:
import SpriteKit
class Obstacle: SKSpriteNode {
let scale = UIScreen.main.scale
init(imageNamed: String, type: UInt32, xPos: CGFloat = 0, yPos: CGFloat = 800) {
let texture = SKTexture(imageNamed: imageNamed);
super.init(texture: texture, color: SKColor.clear, size: CGSize(width: texture.size().width * scale, height: texture.size().height * scale);
}
}
这个变通方法解决了我的问题,但我不能相信没有任何功能可以避免这个问题。我的所有其他图像资源,如背景、按钮、播放器模型等,在大小方面都可以正常工作,但它们的所有图像都是通过屏幕设置的。sks场景编辑器,非编程方式。
我没有任何代码以任何方式修改障碍物的比例或大小。
还请注意,我省略了设置x和y位置、物理等的无关代码。
我是iOS开发新手,非常感谢您对我的帮助!