【发布时间】:2015-03-26 18:38:02
【问题描述】:
我在 sprite kit 中构建了一个游戏,我的所有 sksprite 节点都在增加力 cgvector 移动。
我想在游戏中添加一个停止按钮,但如果我要停止所有节点,我将无法恢复它们所拥有的力量。所以我不能停止游戏并从同一点再次玩。
那么有人知道如何在节点上节省力量吗?或者我怎么能到停止按钮?
谢谢。
【问题讨论】:
标签: objective-c ios8 sprite-kit skspritenode
我在 sprite kit 中构建了一个游戏,我的所有 sksprite 节点都在增加力 cgvector 移动。
我想在游戏中添加一个停止按钮,但如果我要停止所有节点,我将无法恢复它们所拥有的力量。所以我不能停止游戏并从同一点再次玩。
那么有人知道如何在节点上节省力量吗?或者我怎么能到停止按钮?
谢谢。
【问题讨论】:
标签: objective-c ios8 sprite-kit skspritenode
您拥有的SKPhysicsWorld 对象有一个名为speed 的属性。
来自 Apple.com:
默认值为 1.0,表示模拟以正常速度运行。非默认值会更改物理模拟中时间流逝的速率。例如,速度值为 2.0 表示物理模拟中的时间是场景模拟时间的两倍。值 0.0 会暂停物理模拟。
因此,基本上您可以将力保持在所有节点上,但有效地“暂停”物理模拟。
或者,您可以使用paused 属性来停止所有动作(不仅仅是使用力的物理动作)
所以如果你要使用 speed 属性:
self.physicsWorld.speed = 0.0;
如果您有很多事情要做,或者如果您想创建一种方法来逐渐减慢慢动作效果的速度,这将非常有用。由于您不必在 sprite kit 中实际制作physicsWorld 对象(它在制作场景时被初始化),这就是您所要做的。
暂停一切也不是很复杂:
self.scene.view.paused = YES;
【讨论】:
paused 属性NO 继续
speed 属性,因此您可以将其设置为 0 以暂停该特定操作,然后当您想继续时,您可以将 speed 更改回1.
【讨论】:
SKSpriteNode 有一个名为 userData 的字典属性。您可以将 dx 和 dy 速度存储在那里以供以后检索。
如果视图中的所有节点都停止移动,您可以使用以下方法枚举所有节点:
for(SKSpriteNode *object in self.children) {
// set velocity of each node
}
如果只有部分节点需要进行速度变化,则需要将每个受影响的节点添加到数组并枚举该数组。
【讨论】: