2017-10-02 5 views
1

私は自分の「生き物」として機能するSKNodeのサブクラスを持っています。これらは、SKActionsを使用してシーンについて自動的に移動します。私は、クリーチャーが動くにつれて、「エネルギー」属性(Int)を修正(減少)することに興味があります。移動中にSKNodeのプロパティを変更します。

クリーチャーは移動SKActionの全長を移動することは保証されていません(中断することがあります)。そのため、移動距離を計算して移動を開始するとプロパティを減少させることは理想的ではありません。私は基本的には「1秒ごとにノードが動いてエネルギーの特性が低下する」と言っています。

どうすればいいですか?私は迷っています!ありがとうございました。

答えて

3

GameScene.swiftクラスには、1秒間隔を追跡できるupdate(deltaTime seconds: TimeInterval)関数があります。累積された時間を保持するクラスレベルの変数を追加し、あなたのクリーチャーがアクションを実行しているかどうかを1秒ごとにチェックします。あなたはエネルギーのプロパティを知っている場合

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 
     } 
    } 
} 
+0

時間間隔を可変にした場合は、それをオンザフライで調整することもできます: 'let energyUpdateTime:TimeInterval = 1'そして' currentTime - self.accumulatedTime> energyUpdateTime' –

2

は、その後、ちょうどあなたの期間として、そしてmove(by: SKActionを使用することを使用します。あなたはあなたのエネルギーがそれに枯渇したい場合はいつでもあなたが行動を停止する必要がある場合

は、ちょうどcharacter.removeActionForKey("character")、そしてあなたのエネルギーメーターを呼び出して、今それを

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") 

をdecreateするグループにSKAction.customActionを使用しますどんなエネルギーが残っていても残っています。

関連する問題