当节点不在视图中时如何删除它?

Posted

技术标签:

【中文标题】当节点不在视图中时如何删除它?【英文标题】:How can I delete a node when it is out of the view? 【发布时间】:2015-05-05 21:00:39 【问题描述】:

我有一个节点在视图中掉落。一旦它在视图之外,我需要将其删除,这样我就可以使用 if 语句调用一个函数来放置另一个。当它不再可见时如何删除它?它目前只调用该函数一次。

这是函数:

func dot() 
    var dotTexture = SKTexture (imageNamed: "dot")
    dotTexture.filteringMode = SKTextureFilteringMode.Nearest

    var dot = SKSpriteNode(texture: dotTexture)
    dot.setScale(0.5)
    dot.position = CGPoint(x: self.frame.size.width * 0.5 , y: self.frame.size.height * 1.1)

    dot.physicsBody = SKPhysicsBody (circleOfRadius: dot.size.height/2.0)
    dot.physicsBody?.dynamic = true
    dot.physicsBody?.allowsRotation = false

    self.addChild(dot)

    println("done")

这是调用函数的 if 语句:

 override func update(currentTime: CFTimeInterval) 
    /* Called before each frame is rendered */
    if self.children.count == 0 
        dot()
    

【问题讨论】:

【参考方案1】:

我发现最简单的方法是在屏幕底部添加一个新的SKNode 并使用与它的碰撞来删除您的点。创建一个空白SKNode 并将其位置设置为稍微偏离屏幕且其宽度等于场景宽度。然后设置contactTestBitMask,这样您就可以知道点何时与节点发生碰撞。然后去掉didBeginContact(SKPhysicsContact: contact)方法中的点

【讨论】:

我在处理重力时使用它。当处理一个将精灵移出屏幕的SKAction 时,我添加了一个带有移动动作的SKAction removeFromParent 动作以创建一个序列,一旦我离开屏幕,它就会删除节点。只是这些计算的基本数学。

以上是关于当节点不在视图中时如何删除它?的主要内容,如果未能解决你的问题,请参考以下文章

swift - 当persistentContainer不在App委托方法中时如何从核心数据中删除所有数据

当 UserID = 1 且 CourseID 不在数组中时删除?

如何删除不在 xpath 字符串数组中的 xml 节点?

当期望值不在视图包中时重定向到登录页面

当向量在内部类中时,如何删除指向对象的向量指针

当新行添加到 UITextView 实例中时,如何向上滚动视图?