Swift 4 SpriteKit SKTexture 缩放问题

标签 swift xcode sprite-kit skspritenode sktexture

我正在开发一个简单的游戏应用程序,但遇到了一个非常奇怪的缩放问题。我扩展了 SKSpriteNode 来创建一个代表游戏世界中障碍的类。该障碍物的 @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() 文档后,我发现它以点而不是像素为单位返回大小值,因此我创建了此解决方法:

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 开发新手,非常感谢有关此问题的任何帮助!

最佳答案

您不应该玩弄比例尺,系统会为您选择正确的比例尺图像。您的代码应如下所示:

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)

请注意,我没有包含任何类型的扩展。

关于Swift 4 SpriteKit SKTexture 缩放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50521384/

相关文章:

ios - Parse,iOS,includeKey 查询不检索指针对象的属性

ios - 删除子项后,Swift/Firebase Tableview 单元格不刷新

objective-c - XCode - 查找某个类的对象的所有使用

xcode - 将 .xcassets 文件添加到 Xcode 框架项目

objective-c - sqlite数据库更新

ios - 在 iOS 8 的 SpriteKit 中使用 xScale 翻转 Sprite 不会翻转 SKPhysicsBody

swift SpriteKit : Use of unresolved identifier "player"?

ios - Swift - 搜索 Controller 不断崩溃

Swift 选项错误

ios - 没有 init 方法时如何正确子类化 SKNode?