移动时在 SKNode 上修改 属性
Modify property on SKNode while moving
我有一个 SKNode 的子类作为我的 "creature"。这些使用 SKActions 自动在场景中移动。我有兴趣在生物移动时修改(减少)'energy' 属性(智力)。
生物不能保证移动整个移动 SKAction 的长度(它可以被打断),所以计算总距离然后在它开始移动时立即减少 属性 不是理想的。我基本上想说 "for every 1 second the node is moving, decrease the energy property".
我该怎么做?我不知所措!谢谢。
在您的 GameScene.swift
class 中,您有一个可以跟踪一秒间隔的 update(deltaTime seconds: TimeInterval)
函数。添加一个 class 级别变量来保存累计时间,然后每隔一秒检查一次你的生物是否正在 运行 它的动作。
class GameScene : SKScene {
private var accumulatedTime: TimeInterval = 0
override func update(_ currentTime: TimeInterval) {
if (self.accumulatedTime == 0) {
self.accumulatedTime = currentTime
}
if currentTime - self.accumulatedTime > 1 {
if creatureNode.action(forKey: "moveActionKey") != nil {
// TODO: Update energy status
}
// Reset counter
self.accumulatedTime = currentTime
}
}
}
如果您知道能量 属性,那么只需将其用作您的持续时间,并使用 move(by:
SKAction。
如果你想让你的能量随着它耗尽,在一个组中使用SKAction.customAction
来减少它
var previousTime = 0
let move = SKAction.moveBy(x:dx * energy,y:dy * energy,duration:energy)
let depreciateEnergy = SKAction.customAction(withDuration:energy,{(node,time) in node.energy -= (time - previuosTime);previousTime = time})
let group = [move,depreciateEnergy]
character.run(group,withKey:"character")
现在如果任何时候你需要停止这个动作,只要调用character.removeActionForKey("character")
,你的能量计就会停留在剩余的能量上。
我有一个 SKNode 的子类作为我的 "creature"。这些使用 SKActions 自动在场景中移动。我有兴趣在生物移动时修改(减少)'energy' 属性(智力)。
生物不能保证移动整个移动 SKAction 的长度(它可以被打断),所以计算总距离然后在它开始移动时立即减少 属性 不是理想的。我基本上想说 "for every 1 second the node is moving, decrease the energy property".
我该怎么做?我不知所措!谢谢。
在您的 GameScene.swift
class 中,您有一个可以跟踪一秒间隔的 update(deltaTime seconds: TimeInterval)
函数。添加一个 class 级别变量来保存累计时间,然后每隔一秒检查一次你的生物是否正在 运行 它的动作。
class GameScene : SKScene {
private var accumulatedTime: TimeInterval = 0
override func update(_ currentTime: TimeInterval) {
if (self.accumulatedTime == 0) {
self.accumulatedTime = currentTime
}
if currentTime - self.accumulatedTime > 1 {
if creatureNode.action(forKey: "moveActionKey") != nil {
// TODO: Update energy status
}
// Reset counter
self.accumulatedTime = currentTime
}
}
}
如果您知道能量 属性,那么只需将其用作您的持续时间,并使用 move(by:
SKAction。
如果你想让你的能量随着它耗尽,在一个组中使用SKAction.customAction
来减少它
var previousTime = 0
let move = SKAction.moveBy(x:dx * energy,y:dy * energy,duration:energy)
let depreciateEnergy = SKAction.customAction(withDuration:energy,{(node,time) in node.energy -= (time - previuosTime);previousTime = time})
let group = [move,depreciateEnergy]
character.run(group,withKey:"character")
现在如果任何时候你需要停止这个动作,只要调用character.removeActionForKey("character")
,你的能量计就会停留在剩余的能量上。