在 Sprite Kit 中停止 repeatActionForever

Posted

技术标签:

【中文标题】在 Sprite Kit 中停止 repeatActionForever【英文标题】:Stop repeatActionForever in Sprite Kit 【发布时间】:2014-06-23 09:19:31 【问题描述】:

在我的游戏中,我使用 SKAction repeatActionForever: 方法定期调用带有 performSelector: 的某些方法。正如我所看到的,没有办法阻止这种情况。我试图通过removeActionForKey:removeAllActions 停止 - 没有结果。我不想递归调用这个动作,所以我需要帮助。

更新: 我的 SKAction 代码

levelTimer=[SKAction repeatActionForever:[SKAction sequence:@[[SKAction waitForDuration:30.0],[SKAction performSelector:@selector(moveToNextLevel) onTarget:self]]]];
[self runAction:levelTimer withKey:@"levelTimerAction"];

【问题讨论】:

此方法似乎需要键入的操作。 【参考方案1】:

repeatActionForever 方法应该在运行SKAction 的节点上调用,所以:

 [sprite removeActionForKey:@"forevercalleraction"]; 

假设你像这样添加动作,并且sprite变量没有在本地添加(在.h中声明):

 [sprite runAction:repeatPerformSelectorAction withKey:@"forevercalleraction"];

总结以上,检查这些:

    运行动作的节点在.h中声明 您使用相同的键字符串来添加和删除操作 您尝试在 1 中声明的同一节点上调用 removeActionForKey。

希望对你有帮助!

【讨论】:

查看我更新的问题。我不向精灵添加动作。我将此添加到我的 SKScene。我试图通过 [self removeActionForKey:@"levelTimerAction"]; 删除它 是否有必要添加 SKScene,因为您可以创建一个简单的节点并将此操作添加到该不可见节点..? 谢谢,现在它可以工作了 :) 运行我的操作的不可见节点。嗯,这废话有道理 如果您使用这种方法,它会起作用。我昨晚就做了这件事。一般来说,最好总是使用一个键字符串,这样您就可以稍后引用该操作或找出它是否为 nil(而不是其余的全部)。这是一个好习惯。您可以为您的键创建和外部 NSString 常量,将它们放入字典或数组或集合中。然后轻松地做很多事情。

以上是关于在 Sprite Kit 中停止 repeatActionForever的主要内容,如果未能解决你的问题,请参考以下文章

xcode sprite kit 背景音乐

如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?

断点后获取 Sprite-kit 更新方法增量时间

Sprite Kit runAction 延迟,奇怪的错误?

如何使用 Swift 2(Xcode 7)在我的 Sprite Kit 游戏中为背景音乐设置静音按钮?

如何在 sprite kit 中引用多个同名的 sprite?