使用 Swift 4 创建一个 SKSpriteNode 类



我用 Swift 4 和 XCode 编写了一个简单的游戏,并在 GameScene 中编写了所有内容。我所有的元素(怪物、玩家、射弹等(都在游戏场景中编码。

我想将我的代码转移到专用类(类玩家、类怪物等(中。

我想知道SKSpriteNode类的基本结构以及该类在GameScene中的调用,以便更有效地调整我的代码。

这是我尝试过的一个例子:

class Vaisseau: SKSpriteNode /*: Creatures */{
var coeur: Int = 0
init(texture: SKTexture, size: CGSize)
{
    let texture = SKTexture(imageNamed: "player")
    super.init(texture: texture, color: UIColor.clear, size: texture.size())
}
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

而游戏场景中的初始化:

 let player = Vaisseau()

以下是它在GameScene中的实际定义:

let player = SKSpriteNode(imageNamed: "player")

您声明 init 具有两个参数(texture: SKTexture, size: CGSize)但没有在初始化调用中传递参数

let player = Vaisseau()

您需要将初始化更改为...

let texture = SKTexture(imageNamed: "player")
let player = Vaisseau(texture: texture, size: texture.size())

并将初始化更改为

init(texture: SKTexture, size: CGSize) {
    super.init(texture: texture, color: UIColor.clear, size: size)
}

或者将类中的初始化更改为...

init() {
    let texture = SKTexture(imageNamed: "player")
    super.init(texture: texture, color: UIColor.clear, size: texture.size())
}

并将初始化调用保留为...

let player = Vaisseau()
player.position = CGPoint(x: 500, y: 500)
addChild(player)

EDIT 添加了上述 2 行,以向您展示这些需要在场景中 但其他项目,如alpha,zPosition,actions,zRotation等可以在类内部

你需要问自己弄清楚使用哪一个是"玩家的纹理会有所不同吗?"如果是这样,你可能要考虑第一个选项,即你传递纹理。

最新更新