【问题标题】:Creating an SKSpriteNode class with Swift 4使用 Swift 4 创建 SKSpriteNode 类
【发布时间】:2018-03-12 20:52:47
【问题描述】:

我使用 Swift 4 和 XCode 编写了一个简单的游戏,并且在 GameScene 中编写了所有内容。我的所有元素(怪物、玩家、弹丸等)都在 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)
}

还有GameScene中的初始化:

 let player = Vaisseau()

这是它在 GameScene 中的实际定义方式:

let player = SKSpriteNode(imageNamed: "player")

【问题讨论】:

    标签: swift class sprite-kit skspritenode


    【解决方案1】:

    你声明你的 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 更改为...

    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 添加了上述两行以向您显示那些需要在场景中 但其他项目,如 alpha、zPosition、动作、zRotation 等可以在类中

    您需要问自己以确定使用哪一个是“玩家的纹理会有所不同吗?”如果是这样,您可能需要考虑传入纹理的第一个选项。

    【讨论】:

    • 纹理不会改变,所以我将使用第二个选项。并且“addChild(player)”是否应该留在 GameScene 的函数 didMove(to view: SKView) 中?因为我的播放器元素停留在场景的右下角,所以我想知道 addChild 的位置是否是原因。
    • (如果您需要看清楚,我可以编辑帖子中的“addChild”代码)
    • addChild 部分必须保留在场景中(因为它正在添加到场景中),同样您也希望将定位放置在场景代码中而不是类中。 (见我的编辑)
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多