【问题标题】:enumerateChildNodesWithName not stoppingenumerateChildNodesWithName 没有停止
【发布时间】:2014-09-18 18:03:49
【问题描述】:

我正在构建一个大致遵循 raywenderlich.comHow To Make a Game Like Space Invaders with Sprite Kit Tutorial: Part 1 教程的 Sprite Kit“入侵者”游戏

我遇到了enumerateChildNodesWithName 方法的问题。我正在使用该方法简单地沿其 X 轴(从左到右)移动 SKSpriteNode,并在节点位于框架右边缘 100 点以内时停止移动。

这是我对enumerateChildNodesWithName 方法的使用:

-(void)updateMoveInvaders:(NSTimeInterval)currentTime
{
    [self enumerateChildNodesWithName:invaderName usingBlock:^(SKNode *node, BOOL *stop) {

        [node setPosition:CGPointMake((node.position.x + 1), node.position.y)];

        if (CGRectGetMaxX(node.frame) > (self.frame.size.width - 100)){
            *stop = YES;
            NSLog(@"should stop");
        }
    }];
}

逻辑似乎是正确的,因为当节点在框架边缘的 100 点内时,字符串“应该停止”被记录到控制台,但枚举并没有停止并且节点继续向右移动。为什么会这样?

我这样称呼这个方法:

- (void)update:(NSTimeInterval)currentTime
{
    [self updateMoveInvaders:currentTime];
}

完整的可执行代码(Xcode 项目)可以在GitHub找到

【问题讨论】:

    标签: objective-c sprite-kit


    【解决方案1】:

    这会在每一帧调用 updateMoveInvaders:

    - (void)update:(NSTimeInterval)currentTime
    {
        [self updateMoveInvaders:currentTime];
    }
    

    这意味着对于每个具有invaderName 的节点,每帧都会执行此操作:

    [node setPosition:CGPointMake((node.position.x + 1), node.position.y)];
    

    如果您每帧继续执行此行一次,节点会一直向右移动,这不是很明显吗?

    【讨论】:

    • 好的。那时对更新机制非常缺乏了解。谢谢
    猜你喜欢
    • 2016-11-12
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多