【问题标题】:Child once removed from parent does not re-appear孩子一旦从父母中移除就不会重新出现
【发布时间】:2019-10-25 17:45:02
【问题描述】:

我正在制作一个超级简单的游戏,游戏从一组形状(代码块中的形状)中创建一个随机的、可点击的形状。一旦被点击,我在被点击的节点上调用 node.removefromparent() 并通过 addchild 将同一数组中的新节点添加到根节点。

这是我的问题:如果创建的随机节点与之前删除的节点相同,则它不会显示。我该如何解决这个问题?

创建函数和删除函数的代码如下:

创作

func CreateShape() {

        let shape = shapes.randomElement()!
        shape.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        shape.colorBlendFactor = 1.0
        shape.color = colors.randomElement() ?? UIColor.systemPink
        shape.name = "figur"
        shape.zPosition = 100
        shape.physicsBody = SKPhysicsBody(circleOfRadius: 150)
        shape.physicsBody?.isDynamic = false
        shape.position = CGPoint(x: randomPos().x, y: randomPos().y)
        print(shape)

        addChild(shape)

    }

删除:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        let touch = touches.first
        let location = touch!.location(in: self)
        let tappedNodes = nodes(at: location)

        guard let tapped = tappedNodes.first else { return }

        if tapped.name == "figur" {

            let fadeOut = SKAction.fadeAlpha(to: 0, duration: 0.5)
            let randomAction = actions.randomElement()!
            let remove = SKAction.removeFromParent()
            let sequence = SKAction.sequence([randomAction, fadeOut, remove])
            sequence.timingMode = .easeInEaseOut

            tapped.run(sequence)

            self.isUserInteractionEnabled = false

            DispatchQueue.main.asyncAfter(deadline: .now() + 1.5, execute: {

                self.isUserInteractionEnabled = true
                self.CreateShape()

            })
        }
    }

【问题讨论】:

  • 如果您发布shapes.randomElement()的代码会很有帮助
  • @0x141E 这是我的 SKSpritnodes 数组。还有更多内容,但字符限制不允许我发布更多内容:) var 形状:[SKSpriteNode] = [SKSpriteNode(imageNamed: "shapes/Arrow"), SKSpriteNode(imageNamed: "shapes/bell.fill"), SKSpriteNode (imageNamed: "shapes/bolt")]
  • 只有在尝试添加与被点击的节点相同的节点时才会得到大节点?可能是时间错误并在 removeFromParent 之前添加节点(尽管这也应该给出错误)。如果选择了相同的形状,在添加之前复制该形状会发生什么?

标签: swift xcode sprite-kit


【解决方案1】:

您将 alpha 设置为 0,但您从未重置它。

func CreateShape() {

        let shape = shapes.randomElement()!
        shape.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        shape.colorBlendFactor = 1.0
        shape.color = colors.randomElement() ?? UIColor.systemPink
        shape.name = "figur"
        shape.zPosition = 100
        shape.physicsBody = SKPhysicsBody(circleOfRadius: 150)
        shape.physicsBody?.isDynamic = false
        shape.position = CGPoint(x: randomPos().x, y: randomPos().y)
        shape.alpha = 1.0 //<-----insert here
        print(shape)


        addChild(shape)

    }

【讨论】:

  • 是的,就是这样。谢谢! PS:也谢谢大家!!
  • 没问题,很容易错过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多