在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?
Sprite Kit runAction 延迟,奇怪的错误?