Swift — добавление фонового изображения в сцену Spritekit

#ios #swift #sprite-kit

#iOS #swift #sprite-kit

Вопрос:

Вот мой код, я не использовал каталог ресурсов для своего интерфейса изображений Bak ground.jepg. Вместо этого я просто перетащил это изображение 2048×1535 в проект. Но изображение появилось неправильно. Я хочу, чтобы изображение отображалось в качестве фонового изображения, заполняя весь экран.

 import SpriteKit
import GameplayKit
class GameScene: SKScene {

    var background = SKSpriteNode(imageNamed: "InterfaceBakground.jpeg")


    override func didMove(to view: SKView) {
        background.position = CGPoint(x: self.size.height/2, y: self.frame.width/2)

        self.addChild(background)
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}
  

Я видел это в Интернете, что меня немного вдохновляет:

Но если вы используете изображение, которое точно соответствует размеру экрана, оно может появиться не там, где вы ожидаете. Это связано с тем, что addChild по умолчанию добавляет новые спрайты в позиции 0, 0 (нижний левый угол). Если вы хотите использовать изображение определенного размера для вашего экрана, вам придется изменить его положение.

Мой вопрос в том, как изменить положение, чтобы оно соответствовало устройствам для дисплеев разного размера? Заранее спасибо.

Ответ №1:

Попробуйте этот код:

 override func didMove(to view: SKView) {
    background.position = CGPoint(x: 0, y: 0)
    background.size.width = self.size.width
    background.size.height = self.size.height
    background.anchorPoint = CGPoint(x: 0.5,y: 0.5)

    self.addChild(background)
}
  

Точка привязки (0,5, 0,5), которая центрирует изображение в его положении.

Комментарии:

1. подождите, если это сработает, это означает, что точка привязки вашей сцены равна 0,5, 0,5. Это означает, что вам не нужно ничего устанавливать для фона, кроме размера (все переменные здесь являются переменными по умолчанию, кроме self.size.width и self.size.height, которые масштабируют спрайт до сценыразмер)

Ответ №2:

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

 override func didMove(to view: SKView) {
        background.size.width = self.size.width
        background.size.height = self.size.height
        background.anchorPoint = CGPoint(x: 0, y: 0)


        self.addChild(background)
    }
  

Комментарии:

1. Нет, это не сработает. Изображение неуместно.

2. нет точки привязки, если бы его точка привязки сцены была равна 0,0, это сработало бы

3. Вы совершенно правы, я не был уверен в этом, просто знал, что вы можете установить его размер таким образом 🙂