Невозможно добавить ребенка в GameScene, только в SKSpriteNode - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь создать SKSpriteNode из класса (Planets) в моей GameScene при нажатии кнопки.Моя проблема в том, что граница не появляется на экране.

class Planets: SKSpriteNode, EventListenerNode, InteractiveNode {

var gameScene: GameScene!

func didMoveToScene(){
    isUserInteractionEnabled = true
    gameScene = (SKScene(fileNamed: "GameScene") as! GameScene)
}

func interact() {
    print("hi \(self.name ?? "Planet X")")
    let border = SKSpriteNode(color: SKColor.gray, size: CGSize(width: 200, height: 200))
    border.name = "border"
    border.zPosition = 100
    border.position = CGPoint(x: gameScene.frame.size.width/2, y: gameScene.frame.size.height/2)
    gameScene.addChild(border)
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesEnded(touches, with: event)
    interact()
}

}

Однако, если я использую self.addChild, (это означает, что это класс Planets), он работает, поэтому он работает, если я добавляю границу к узлу SKSpriteNode, но я не хочу этого, потому что размер отличается, позиция также отличается.Я просто хочу добавить его в мою GameScene.Заранее спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

Я думаю, что проблема здесь в том, что класс Planets создает свою собственную копию GameScene с этой строкой здесь:

gameScene = (SKScene(fileNamed: "GameScene") as! GameScene)

Эта копия никогда не представляется и поэтому никогда не видна и неэто граница, которая была добавлена ​​к нему.

Если Planets является дочерним элементом GameScene, тогда я попытался бы ссылаться на родителя узла Planets, когда вы добавляете границу следующим образом:

func interact() {
    print("hi \(self.name ?? "Planet X")")

    guard let gameScene = self.parent as? GameScene else {
        print("Error: could not get the parent scene")
        return
    }

    let border = SKSpriteNode(color: SKColor.gray, size: CGSize(width: 200, height: 200))
    border.name = "border"
    border.zPosition = 100
    border.position = CGPoint(x: gameScene.frame.size.width/2, y: gameScene.frame.size.height/2)
    gameScene.addChild(border)
}
...