Swift 4 SpriteKit SKTexture проблема масштабирования - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над простым игровым приложением и застрял в действительно странной проблеме масштабирования.Я расширил SKSpriteNode, чтобы создать класс, который представляет собой препятствие в моем игровом мире.У этого препятствия все изображения @ 1x, @ 2x и @ 3x установлены в файле Assets.xcassets

Моя проблема в том, что независимо от того, какую загрузочную SKTexture я загружаю и передаю в super.init, получается ровно 50%размера моего фактического изображения.Так что, как будто он использует значения @ n-1x, хотя это не так (подтверждается удалением изображений @ 1x и @ 3x для теста).

Код:

import SpriteKit

class Obstacle: SKSpriteNode {

init(imageNamed: String, type: UInt32, xPos: CGFloat = 0, yPos: CGFloat = 800) {
    let texture = SKTexture(imageNamed: imageNamed);
    super.init(texture: texture, color: SKColor.clear, size: texture.size();
    }
}

Я тестирую на устройстве @ 2x и после прочтения документации SKTexture.size () вижу, что он возвращает значения размера в точках, а не в пикселях, поэтому я создал этот обходной путь:

import SpriteKit

class Obstacle: SKSpriteNode {

let scale = UIScreen.main.scale

init(imageNamed: String, type: UInt32, xPos: CGFloat = 0, yPos: CGFloat = 800) {
    let texture = SKTexture(imageNamed: imageNamed);
    super.init(texture: texture, color: SKColor.clear, size: CGSize(width: texture.size().width * scale, height: texture.size().height * scale);
    }
}

Этот обходной путь решенмоя проблема, но я не могу поверить, что нет никаких функциональных возможностей, чтобы избежать этого.Все остальные мои графические ресурсы, такие как фон, кнопки, модель плеера и т. Д., Работают нормально с точки зрения размера, однако все их изображения устанавливаются с помощью редактора сцены .sks, а не программно.

Я не делаюиметь где-либо еще код, который каким-либо образом изменяет масштаб или размер объектов препятствий.

Также обратите внимание, что я опустил нерелевантный код, который устанавливает координаты x и y, физику и т. д.

IЯ новичок в разработке для iOS, и любая помощь в этом вопросе очень ценится!

1 Ответ

0 голосов
/ 25 мая 2018

Вы не должны играть с масштабом, система выбирает правильное изображение масштаба для вас.Ваш код должен выглядеть следующим образом:

import SpriteKit

class Obstacle: SKSpriteNode {



init(imageNamed: String, type: UInt32, xPos: CGFloat = 0, yPos: CGFloat = 800) {
    let texture = SKTexture(imageNamed: imageNamed);
    super.init(texture: texture, color: SKColor.clear, size: Texture.size());
    }
}

...

let obstacle =  Obstacle(imageNamed:“myImage”,type:0)

Обратите внимание, что я не включил расширение любого типа.

...