每次删除节点时都会调用一个方法吗?还是加了?
沿着touchesBegan
的条件,每次触摸屏幕时都会调用该方法。
或touchesMoved
在触摸和移动节点时调用的方法。
当节点获得removeFromParent
时,是否有这样的方法被调用?
我目前正在使用update
方法来检测节点是否仍然存在,如:
SKNode *n = [self childNodeWithName: @"n"];
if (!n)
{
// no n
if (life != 0)
{
[self addChild:_n);
life--;
}
}
现在,当该节点丢失时,我删除1个生命,然后再次添加该节点。
问题是更新方法运行得太快,每次删除节点时都会删除2个生命。我相信这是因为添加节点比更新方法慢一点。因此,在检测到节点再次出现之前,更新方法需要2个循环。
答案 0 :(得分:3)
没有这样的方法。但你可以创建一个。
创建(例如)SKSpriteNode的子类并覆盖所有“remove”方法(或仅覆盖您正在使用的方法)。在该方法中,向需要接收删除事件的任何对象发送消息,或发送通知并注册其他对象以接收该通知。不要忘记调用重写方法的超级实现。
答案 1 :(得分:2)
如果您在更新
中运行此行SKNode *n = [self childNodeWithName: @"n"];
if (!n)
该语句将永久运行,直到您停止游戏或您的节点不等于nil
更正您需要创建 BOOL 值
的行为BOOL _shouldProceed;
如果需要,请更改名称
当您将节点集 BOOL 值创建为true或是
时- (void)createNode {
_shouldProceed = YES;
// Your implementation for the node
}
并将此内置更新
SKNode *n = [self childNodeWithName:@"n"];
if (!n && _shouldProceed) {
_shouldProceed = NO;
if (life != 0) {
[self createNode];
life--;
}
}
如果您的节点等于nil且 BOOL 值等于true / yes 您需要将 BOOL 值设置为false / NO
采用这种方法,这个陈述只会发生一次
使用
创建新节点时[self createNode];
BOOL 值设置为true / YES
这应该可以解决你的问题
祝你好运!!