ios - SpriteKit 检测节点是否从父节点移除

标签 ios objective-c sprite-kit

有没有在每次删除节点时调用的方法?还是添加?

根据 touchesBegan 的条款,每次触摸屏幕时都会调用该方法。

touchesMoved 一种在节点被触摸和移动时调用的方法。

那么有没有这样一种方法,在节点获取removeFromParent时调用?

我目前正在使用 update 方法来检测节点是否仍然存在,例如:

SKNode *n = [self childNodeWithName: @"n"];
if (!n)
{
    // no n
    if (life != 0)
    {
        [self addChild:_n);
        life--;
    }
}

现在,每当该节点丢失时,我都会删除 1 条生命,然后再次添加该节点。

问题是更新方法运行得太快以至于每次删除节点时都会删除 2 个生命。我相信这是因为添加回节点比更新方法慢一些。因此,在检测到该节点再次出现之前,更新方法需要 2 个循环。

最佳答案

没有这样的方法。但您可以创建一个。

创建(例如)SKSpriteNode 的子类并覆盖所有“删除”方法(或仅覆盖您正在使用的方法)。在该方法中,向需要接收移除事件的任何对象发送消息,或发送通知并注册其他对象以接收该通知。不要忘记调用重写方法的 super 实现。

关于ios - SpriteKit 检测节点是否从父节点移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485427/

相关文章:

ios - 分配位置后SKSpriteNode变为null

ios - 允许完全访问检查键盘 iOS10

objective-c - 目标 - C -> 将数组作为函数参数传递

swift - IAd 横幅将整个 skscene 向上移动

ios - 为什么会出现 4 MB 使用率和 320 MB 可用内存警告?

iOS 自动布局约束问题 |应用崩溃

ios - 使用空值填充 NSString

iphone - 在uiview上画直线

swift - 移动背景 Swift SpriteKit

swift - 如何在自动生成时翻转 SKSPriteNode