我不知道如何为SKTexture纹理应用Mipmap。我在Swift中使用XCode 8.2.1。
这是我的方法:
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像素
这是启用了mipmapping的输出:
例如不带mipmapping的输出(仅默认线性过滤)
他们看起来都一样。所以我认为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)
结果是相同的:
最佳答案
如果Xcode SpriteKit场景编辑器在您的代码激活mipmapping之前对纹理进行了大小调整,那一点也就不足为奇了。意味着纹理的128x128版本已被映射,因为这就是Xcode和SpriteKit SceneEditor共同存储为纹理的内容。
因此,在代码中启用mipMapping后,无需在“场景编辑器”中设置比例,而是使用它来缩放SKSpriteNode:
https://developer.apple.com/reference/spritekit/skspritenode/1645445-scale
和/或尝试使用SKAction缩放操作:
https://developer.apple.com/reference/spritekit/skaction
这样,您可以绝对确定事件的顺序是
希望这行得通。
关于ios - SpriteKit SKTexture Mipmap不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41788171/