2017-01-22 3 views
2

Я не могу понять, как применять mipmaps для текстуры SKTexture. Я использую XCode 8.2.1 с Swift.SpriteKit SKTexture mipmap не работает

Вот мой метод:

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 enabled output 128*128

И для примера вывода без множественного отображения (только по умолчанию линейной фильтрации) 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

+2

Вы правы. Они точно такие же. Я бросил их в Photoshop и сделал разницу. Тот, у кого нет mipmapping, есть один пиксель слева от того, где он должен быть, на вашем скриншоте, но как только это исправлено, они идентичны. – Confused

ответ

1

Это не удивило бы, вообще, если Xcode SpriteKit Scene Editor делает изменение размеров вашей текстуры перед Мипмаппинг активируется код. Значение 128x128 версии вашей текстуры имеет mipmapping on, потому что это то, что 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. Выполните Scaling

И мы надеемся, что это работает.

+0

Благодарим вас за ответ, но это не поможет. Посмотрите на UPD выше. – widesteppe

+0

DOH! На каких устройствах вы тестировали это? – Confused

+0

Протестировано на моих симуляторах mac и iOS. – widesteppe

Смежные вопросы