Sprite-Kit场景的背景图像

11

我现在正在使用Sprite-Kit场景,并且我想通过gamescene.swift以编程方式将背景设置为名为“bgimage”的图像。 我该怎么做?

import UIKit
import SpriteKit
import CoreGraphics
class gameScene: SKScene {


}

3
使用大写字母为类命名是一个好的惯例。建议将 gameScene 替换为 GameScene,但不是必须的。 - Tiago Marinho
3个回答

13

你可以将背景图像声明为一个SKSpriteNode,将其位置设置在屏幕中央并添加到你的场景中。

import UIKit
import SpriteKit

class gameScene: SKScene {
    var background = SKSpriteNode(imageNamed: "bgimage")

    override func didMoveToView(view: SKView) {
        background.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
        addChild(background)
    }
}

还要确保您在images.xcassets目录中拥有图像。


1
将其大小设置为填充场景也是很好的选择。 - Tiago Marinho
我认为如果你使用设备特定的图像作为背景,而不是通用的图像,效果会更好。这样,每个设备都有自己版本的图像,但也许只是我的想法。 - TheCodeComposer
@TheCodeComposer 对于 iOS 来说是个好主意,但对于 OS X 不太适用。 - Tiago Marinho
虽然这确实有效,但我注意到它可能会消耗大量设备资源,特别是在旧设备上。 - Robin

4
import UIKit
import SpriteKit
import CoreGraphics
class gameScene: SKScene {

var background = SKSpriteNode(imageNamed: "bgimage")

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

addChild(background)


}
}

zPosition应该比游戏场景中的所有其他节点都要低。


Swift 4语法更改 override func didMove(to view: SKView) { 另外,感谢关于zPosition的提示。 - Canuk

1

全尺寸图像背景

override func didMove(to view: SKView) {

    super.didMove(to:view)

    DispatchQueue.main.async{

        self.background.zPosition = 0
        self.background.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
        self.background.size = CGSize(width: self.size.width, height: self.size.height)
        self.addChild(self.background)

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接