gpt4 book ai didi

ios - SpriteKit - 在 Gamescene.sks 中创建 Sprite 并在另一个类中引用

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:22 26 4
gpt4 key购买 nike

我知道我可以在 GameScene.swift 中使用以下内容来引用我在关卡编辑器中创建的 Sprite :

ball = childNode(withName: "ball") as? SKSpriteNode

如果我想从 Ball 类中引用那个球怎么办?以下是我认为可行的方法。我错了。在关卡编辑器中,我为球指定了自定义类 Ball。


1. 我在 GameScene.sks 中创建了一个球 Sprite 并为其分配了 Ball 的自定义类:

sprite in GameScene.sks

  1. 这是我自定义的 Ball 类。 (你可以忽略这些内容,因为它不起作用。)

    class Ball: SKSpriteNode {

    init() {
    let size = CGSize(width: 35, height: 35)
    super.init(texture: nil, color: UIColor.clear, size: size)

    }

    required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    }

    func moveBall() {
    self.position = CGPoint(x: 50, y:50)
    }
    }
  2. 然后,在 GameScene.swift 中,我想使用我定义的 Ball 函数 moveBall()

    class GameScene: SKScene {
    var ball = Ball()
    override func didMove(to view: SKView) {
    ball.moveBall()
    }
    }

最佳答案

Edit

如果您想将自定义对象添加到场景编辑器中,您需要将以下初始化程序添加到您的自定义类中。

class Ball: SKSpriteNode {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

func moveBall() {
self.position = CGPoint(x: 50, y:50)
}
}

init() 函数仅在您在代码中创建新对象时使用。这实际上是您在 block 3 中所做的,这完全违背了您关于从场景编辑器中引用 Sprite 的问题。

如果你愿意,你可以删除 init() ,除非你计划在其他时间通过代码添加对象

然后您需要引用您在场景编辑器中添加的对象。在 block 3 中,您没有引用该对象,而是创建了一个新对象。

class GameScene: SKScene {

private var ball: Ball

override func didMove(to view: SKView) {

if let ball = childNode(withName: "ball") as? Ball {
self.ball = ball
ball.moveBall()
}
}

Original Answer

您没有向我们展示调用对象 initBall 的任何地方

如果要在场景编辑器中添加,则需要确保子类文件具有正确的初始化程序

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

我所做的是从子类 required init 调用设置文件,或者如果它需要设置变量则从代码调用它

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

setup()
}

func setup() {

ball = childNode(withName: "ball") as? SKSpriteNode
ball.size = CGSize(width: 35, height: 35)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

func setupWith(variable: SomeVariableType) {

if variable == x {

//setup based on variable
}
else {

//setup based on variable
}
}

...in your Scene...

if let ball = childNode(withName: "ball") as? Ball {
self.ball = ball

ball.setup(variable: someVarHere)
}

关于ios - SpriteKit - 在 Gamescene.sks 中创建 Sprite 并在另一个类中引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com