我不知道如何为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大小(两个都装)
全尺寸看起来像这样:
ios - SpriteKit SKTexture Mipmap不起作用-LMLPHP

然后我想将其尺寸减小到128 * 128像素

ios - SpriteKit SKTexture Mipmap不起作用-LMLPHP

这是启用了mipmapping的输出:
ios - SpriteKit SKTexture Mipmap不起作用-LMLPHP

例如不带mipmapping的输出(仅默认线性过滤)ios - SpriteKit SKTexture Mipmap不起作用-LMLPHP

他们看起来都一样。所以我认为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)

结果是相同的:
ios - SpriteKit SKTexture Mipmap不起作用-LMLPHP

最佳答案

如果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

这样,您可以绝对确定事件的顺序是

  • 打开mipmapping
  • 执行缩放

  • 希望这行得通。

    关于ios - SpriteKit SKTexture Mipmap不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41788171/

    10-13 02:24