2017-05-19 17 views
0

私は、プレイヤーがスコアを蓄積する速度を計算しようとしているので、ゲームプレイに異なるプロパティを設定しています。私はしかし、それはどのようにそれが常に更新されるので、現在の入力に基づいてそれを行う方法を考え出すロジックに立ち往生しています。スコアのスピードを計算するには?

クリーンアップするために、私は空白のSwift Xcodeプロジェクトを作成し、ボタンと2つのラベルを付けました.1つはScore用、もう1つはSpeed(scoreSpeed)用です。

今の問題は、表示される速度が0で、明らかに最初のスコア位置(scorePos1)と2番目のスコア(scorePos2)の差を計算できないためです。私はそれがスコア値の不正確な「取得」(または不正なscorePosの配置)と関係があると感じています。

私は初心者ですから、もっと良い方法があります。ここで

は私のViewControllerのコードです:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     startTimer() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    var score = Double() 
    var scorePos1 = Double() 
    var scorePos2 = Double() 
    var scoreSpeed = Double() 
    var timerInt: Double = 5.0 

    @IBOutlet weak var scoreLabel: UILabel! 
    @IBOutlet weak var speedLabel: UILabel! 
    @IBAction func Button(_ sender: Any) { 
     score += 1.0 
     scoreLabel.text = "Score: \(score)" 
     scorePos1 = score 
    } 

    var speedTimer = Timer() 

    func startTimer(){ 
     //speedTimer.invalidate() 
     speedTimer = Timer.scheduledTimer(timeInterval: timerInt, target: self, selector: #selector(calcSpeed), userInfo: nil, repeats: true) 
    } 

    func calcSpeed(){ 
     scorePos2 = score 
     scoreSpeed = (scorePos2 - scorePos1)/timerInt 
     speedLabel.text = "Speed: \(scoreSpeed)" 
    } 
} 
+0

このメソッドを 'viewDidLoad'で' startTimer() 'と呼ぶのは、常に0を返すからです。次に、' scorePos2'と 'scorePos1'の両方を' score'に割り当てます。だから違いは常に0 – Maddy

答えて

0

あなたのボタンを押してscorescorePos1を設定して、あなたのcalcSpeed機能がscoreからscorePos2を設定しますので、彼らは両方のスコアです。

scorePos2に設定してください。の速度を計算してください。 scorePos2は歴史のアカウントであれば

また、

scorePos1 - scorePos2 

だろう。

+0

アドバイスありがとう! 私は履歴変数を得るための唯一の機能を持ち、計算を 'scorePos1 - scorePos2'に変更した、別の間隔で別のタイマーを定義しました。 まだ短期間メモリに変数を格納する方法が他にないのだろうかと思います。 –

関連する問題