移动时在 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"),你的能量计就会停留在剩余的能量上。