Проблема с размером активов в простой сцене SpriteKit - PullRequest
0 голосов
/ 12 марта 2019

Я настроил свою сцену следующим образом:

override func viewDidLayoutSubviews() {

    let scene = GameScene(size: CGSize(width: 1334, height: 750))
    let skView = view as! SKView
    scene.backgroundColor = UIColor.red
    scene.scaleMode = .aspectFit
    skView.presentScene(scene)
    skView.showsFPS = true
    skView.showsNodeCount = true
    print("Screen Size: \(GlobalProperties.screenSize.width) x \(GlobalProperties.screenSize.height)")
    print("Scene Size: \(scene.size.width) x \(scene.size.height)")
} 

Как вы можете видеть, я установил размер сцены по умолчанию 1334 x 750, что является разрешением iPhone 6,7,8

.

Я создал ресурс 90x50, а также фон и вставил его следующим образом:

override func didMove(to view: SKView) {
    let bg = SKSpriteNode(texture: SKTexture(imageNamed: "DemoBackgroundVertical"))
    bg.position = CGPoint(x: frame.midX, y: frame.midY)
    bg.zPosition = -10
    bg.size = frame.size
    self.addChild(bg)

    let melon = SKSpriteNode(texture: SKTexture(imageNamed: "CuteMelon"))
    melon.position = CGPoint(x: frame.midX, y: frame.midY)
    print(melon.size)
    self.addChild(melon)
}

Итак, теперь размер сцены в точках равен 667 x 375, размер сцены в пикселях - 1334 x 750, , и я поместил актив в универсальную группу 1x

Правильно ли я понимаю, что при запуске этого на симуляторе iPhone 8 режим масштабирования не должен иметь значения, поскольку соотношение сторон совпадает с размером 1334 x 750, который я изначально установил для сцены?

В этом и заключается проблема, если в Photoshop я создаю идентичную сцену размером 667 x 375 и вставляю ресурс 90x50, он выглядит следующим образом: https://imgur.com/a/BuW2HLI

Но на скриншоте симулятора iphone 8 арбузный актив значительно меньше: https://imgur.com/flMtdfG

Почему это так? Любое руководство будет с благодарностью.

1 Ответ

0 голосов
/ 12 марта 2019

В вашем случае вы хотите использовать слот 2x или реорганизовать свой проект лучше.

Если установить размер сцены по умолчанию 1334x750, вы получите размер сцены 1334x750, а не 667x375, как при 2668 пикселей на 1500 пикселей. Это означает, что ваш движок SpriteKit фактически масштабирует сцену с 1334x750 до 667x375, а затем снова масштабирует ее. Поскольку координаты используют CGPoint, я всегда нахожу это ненужным шагом, потому что в этом пространстве существует 0,5, и поэтому большие числа вызывают путаницу у людей, пытающихся понять, как работает сетчатка.

Итак, у вас есть ресурс 90x50 в сцене 1334x750, а не сцена 667x375.

Первое, что я хотел бы сделать, это изменить размер сцены на 667x375, чтобы вы знали, что работаете в системе координат 1x, а не в системе координат 2x.

Затем попытайтесь игнорировать всю концепцию «пикселя». Придерживайся строго очков. Помните, что 1x означает баллы * 1, 2x означает баллы * 2, а 3x означает баллы * 3. Если вы имеете это в виду. Вы найдете создание активов намного проще. Все, что находится в вашем 1x-слоте, будет соответствовать фактическому размеру вашей игры, а все, что находится в вашем 2x-слоте и вашем 3x-слоте, будет в два и три раза больше соответственно, показывая только более детализированную графику в вашей игре без необходимости что-либо делать с кодом.

Наконец, поместите свою 1x графику с низким разрешением в 1x слот. Теперь вы увидите, что все ваши размеры должны отображаться правильно. Если аппаратное масштабирование 2х выглядит не очень красиво, предоставьте ресурсы в их отдельные 2х слоты, чтобы получить более подробную информацию о нужных изображениях.

...