SpriteKit SKTexture mipmap不起作用

时间:2017-01-22 06:54:40

标签: ios sprite-kit mipmaps sktexture

我无法弄清楚如何为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大小(锅都) 全尺寸看起来像这样: full size image

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

decrease size

这是启用mipmapping的输出: mipmapping enabled output 128*128

例如,没有mipmapping的输出(仅默认线性过滤)without 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)

结果是一样的: enter image description here

1 个答案:

答案 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

通过这种方式,您可以绝对确定事件的顺序是

  1. 启用mipmapping
  2. 执行缩放
  3. 希望这有效。