我无法弄清楚如何为SKTexture纹理应用mipmap。我正在使用XCode 8.2.1和Swift。
这是我的方法:
override func sceneDidLoad() {
logo = childNode(withName: "logo") as! SKSpriteNode
let texture: SKTexture! = SKTexture.init(imageNamed: "logo")
texture.usesMipmaps = true
logo.texture = texture
}
我使用样本图像png 512 * 512大小(锅都) 全尺寸看起来像这样:
然后我想将其大小减小到128 * 128像素
它们看起来都一样。所以我认为mipmaps不适用。请帮助我,我花了3天时间尝试解决这个问题。
UPD: 正如Confused告诉我的那样,我在代码中完成了所有工作。创建纹理并启用mipmaping,将其分配给SKSpriteNode,然后按比例方法或操作执行缩放。
let texture = SKTexture.init(imageNamed: "logo")
texture.usesMipmaps = true
logo = SKSpriteNode.init(texture: texture)
logo.position = CGPoint(x: 0, y: 0)
self.addChild(logo)
//logo.scale(to: CGSize(width: 128, height: 128))
let scaleAction = SKAction.scale(to: CGSize(width: 128, height: 128), duration: 1)
logo.run(scaleAction)
答案 0 :(得分:1)
如果Xcode SpriteKit场景编辑器在您的代码激活mipmapping之前正在调整纹理大小,那就不足为奇了。这意味着128x128版本的纹理已经进行了mipmapping,因为这是Xcode和SpriteKit SceneEditor密谋存储为纹理的。
因此,在代码中打开mipMapping后,不要在场景编辑器中设置比例,而是使用它来缩放SKSpriteNode:
https://developer.apple.com/reference/spritekit/skspritenode/1645445-scale
和/或尝试使用SKAction扩展操作:
https://developer.apple.com/reference/spritekit/skaction
通过这种方式,您可以绝对确定事件的顺序是
希望这有效。