Swift 4 SpriteKit SKTexture缩放问题
Swift 4 SpriteKit SKTexture scaling issue
我正在开发一个简单的游戏应用程序,但遇到了一个非常奇怪的缩放问题。我已经扩展了 SKSpriteNode 来制作一个 class 代表我游戏世界中的障碍。此障碍物的@1x、@2x 和@3x 图像均设置在 Assets.xcassets
中
我的问题是,无论我加载并传递给 super.init 的 SKTexture 是什么,最终都恰好是我实际图像大小的 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() 文档后,我发现它 returns 大小值以点而不是像素为单位,所以我创建了这个解决方法:
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 场景编辑器设置的,而不是以编程方式设置的。
我在其他任何地方都没有任何代码可以以任何方式修改 Obstacle 对象的比例或大小。
另请注意,我省略了设置 x 和 y 位置、物理等的不相关代码。
我是 iOS 开发的新手,非常感谢任何对此问题的帮助!
你不应该玩比例尺,系统会为你选择正确的比例尺图像。您的代码应如下所示:
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());
}
}
...
let obstacle = Obstacle(imageNamed:“myImage”,type:0)
请注意,我没有包含任何类型的扩展。
我正在开发一个简单的游戏应用程序,但遇到了一个非常奇怪的缩放问题。我已经扩展了 SKSpriteNode 来制作一个 class 代表我游戏世界中的障碍。此障碍物的@1x、@2x 和@3x 图像均设置在 Assets.xcassets
中我的问题是,无论我加载并传递给 super.init 的 SKTexture 是什么,最终都恰好是我实际图像大小的 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() 文档后,我发现它 returns 大小值以点而不是像素为单位,所以我创建了这个解决方法:
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 场景编辑器设置的,而不是以编程方式设置的。
我在其他任何地方都没有任何代码可以以任何方式修改 Obstacle 对象的比例或大小。
另请注意,我省略了设置 x 和 y 位置、物理等的不相关代码。
我是 iOS 开发的新手,非常感谢任何对此问题的帮助!
你不应该玩比例尺,系统会为你选择正确的比例尺图像。您的代码应如下所示:
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());
}
}
...
let obstacle = Obstacle(imageNamed:“myImage”,type:0)
请注意,我没有包含任何类型的扩展。