Ios SpriteKit纹理mipmap不';行不通

Ios SpriteKit纹理mipmap不';行不通,ios,sprite-kit,mipmaps,sktexture,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.

我想不出如何为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像素

以下是启用mipmapping的输出:

例如,不带mipmapping的输出(仅默认线性过滤)

他们看起来都一样。所以我认为mipmaps不适用。请帮帮我,我花了三天时间试图解决这个问题

UPD: 正如我所说的,我用代码完成了所有的工作。在启用mipmapping的情况下创建纹理,将其指定给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版本的纹理启用了mipmapping,因为Xcode和SpriteKit SceneEditor合谋将其存储为纹理

因此,在代码中启用mipMapping后,不要在场景编辑器中设置比例,而是使用此选项来缩放SKSpriteNode:

和/或试验SKAction缩放操作:

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

  • 启用mipmapping
  • 执行缩放

  • 希望这能奏效。

    你说得对。他们完全一样。我把它们放进Photoshop,做了一个不同的混合。在屏幕截图中,没有mipmapping的是它应该位于的左侧的一个像素,但是一旦更正,这些像素是相同的。谢谢你的回答,但这没有帮助。看看上面的UPD.DOH!你在什么设备上测试过这个?在我的mac和iOS模拟器上测试过。argh。好啊你肯定会想在设备上测试。很有可能GPU优化(mipmapping就是其中之一)不会在模拟器中发生。好吧,也许模拟器不是进行此类测试的最佳案例,但我认为mipmapping应该在macOS 10.12.3上工作