enumerateChildNodesWithName 没有停止
Posted
技术标签:
【中文标题】enumerateChildNodesWithName 没有停止【英文标题】:enumerateChildNodesWithName not stopping 【发布时间】:2014-09-18 18:03:49 【问题描述】:我正在构建一个大致遵循 raywenderlich.com 的 How 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找到
【问题讨论】:
【参考方案1】:这会在每一帧调用 updateMoveInvaders:
- (void)update:(NSTimeInterval)currentTime
[self updateMoveInvaders:currentTime];
这意味着对于每个具有invaderName 的节点,每帧都会执行此操作:
[node setPosition:CGPointMake((node.position.x + 1), node.position.y)];
如果您每帧继续执行此行一次,节点会一直向右移动,这不是很明显吗?
【讨论】:
好的。那时对更新机制非常缺乏了解。谢谢以上是关于enumerateChildNodesWithName 没有停止的主要内容,如果未能解决你的问题,请参考以下文章