我有一个SKNode的子类,充当我的"生物"。这些使用SKActions自动移动场景。我有兴趣修改(减少)能量'属性(Int)作为生物移动。
该生物不能保证移动SKAction的整个长度(它可以被中断),因此计算总距离然后在它开始移动时立即降低属性并不理想。我基本上喜欢说"节点每1秒移动一次,降低能量属性"。
我该怎么做?我不知所措!谢谢。
答案 0 :(得分:3)
在GameScene.swift
课程中,您有一个update(deltaTime seconds: TimeInterval)
功能,可以跟踪一秒钟的间隔。添加一个类级别变量来保存累积的时间,然后每隔一秒检查一下你的生物是否正在运行它的动作。
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
}
}
}
答案 1 :(得分:2)
如果您知道能量属性,那么只需将其用作持续时间,并使用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")
,您的能量计将保留剩余的能量。