Расчет скорости прессов в единстве - PullRequest
0 голосов
/ 12 мая 2018

Я делаю игру, которая вычисляет скорость нажатий, которые пользователь делает за отведенное время. Мне удалось создать некоторый код ставки.

 rate++;
 if (rate == reset_the_timer_lim) {
        timer_limit--;
        rate = 0;
        //print(counter_of_presses);
        //okay print the amt of button presses button/rate

        //so we get a number of keypresses in alotted time unit

        //int calc the rate
        for (int x = 0; x < 2; x++)
        {
            rate_nums[x] = counter_of_presses;
            print(rate_nums.ToString());
        }
    }

Вот код нажатия кнопки

if (Input.GetKeyDown (KeyCode.Space)) 
{
  counter_of_presses++;
  counter_press.text = counter_of_presses.ToString();
}

У меня есть отдельный счетчик (ставка), который считает до другого числа.

Так, например,

Если я установил reset_the_timer_lim = 25, скорость отсчитывается до 25 и сбрасывается в ноль. Затем он принимает количество нажатий (код Input.getKey (2-й блок)) и пытается сохранить их в массиве. Вычитает окончательную ставку минус начальную ставку.

Однако, когда я запускаю этот код, оба элемента в массиве совпадают. Он не ждет, пока скорость сбрасывается, и я не уверен, куда идти дальше.

РЕДАКТИРОВАТЬ 5/12/18

public class press_game : MonoBehaviour {
public int timer_limit = 120;
private int rate;

public GameObject player_heart;
//public GameObject camera_back_up;
public int reset_the_timer_lim;
private int counter_of_presses;
public int amt_of_presses_before_end;
public Text show_time;
public Text counter_press;
public Text get_it_2_here;
public int[] rate_nums;
private float sum, sum2;
public float amt_to_widen_heart, amt_to_widen_cam;

public GameObject a1a, a2a, a3a, a4a, a5a, a6a, a7a, a8a, a9a, a10a, a11a, a12a, a13a, a14a, a15a, a16a;
// Use this for initialization
void Start () {
    rate_nums = new int[2];
    get_it_2_here.text = amt_of_presses_before_end.ToString ();
    //a1a.SetActive(true);
}

// Update is called once per frame
void Update () {
    sum = sum + amt_to_widen_heart;
    sum2 = sum2 + amt_to_widen_cam;
    rate++;
    if (rate == reset_the_timer_lim) {
        timer_limit--;
        rate = 0;
        //print(counter_of_presses);
        //okay print the amt of button presses button/rate

        //so we get a number of keypresses in alotted time unit

        //int calc the rate
        for (int x = 0; x < 2; x++)
        {
            rate_nums[x] = counter_of_presses;
            print(rate_nums.ToString());
        }
    }
    //print (timer_limit);
    show_time.text = timer_limit.ToString ();
    //get_it_2_here.text = 

    if (timer_limit < 0) {
        show_time.text = "Out of time!!";
        //counter_of_presses = 0;
        counter_press.text = "OUT OF TIME!";
        if(counter_of_presses < amt_of_presses_before_end){
            print("You have lost the game!");
            //counter_of_presses = 0;
        }
        else{
            print ("You have won this game!");
            //counter_of_presses = 0;
        }
    }

    if (Input.GetKeyDown (KeyCode.Space)) {
        counter_of_presses++;
        counter_press.text = counter_of_presses.ToString();
        player_heart.transform.localScale += new Vector3(transform.localScale.x + sum, transform.localScale.y + sum, transform.localScale.z);
        //camera_back_up.transform.localScale += new Vector3(transform.localScale.x + sum2, transform.localScale.y + sum2, transform.localScale.z);

    }
}

}

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я написал этот небольшой кусочек кода для вас, он очень простой и рассчитывает скорость только в течение трех секунд, после чего он снова начинает слежку, но он может дать вам несколько идей

using UnityEngine;

public class RateCounter : MonoBehaviour
{

    [SerializeField]  float timeooutValue = 3;
    [SerializeField] float startTime;
    [SerializeField] int counter;
    [SerializeField] float currentRate;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (Time.time - startTime > timeooutValue)
            {
                startTime = Time.time;
                counter = 0;
                currentRate = 0;
            }
            else

            {
                counter++;
                currentRate=counter/(Time.time-startTime);
            }

        }

    }

}
0 голосов
/ 13 мая 2018

Думайте о rate_final как о действительном числе, которое компьютер активно считает.Это скорость_финал.Число, взятое (если == reset_the_timer_lim), является начальной ставкой.

 //the rate initial
 if (rate == reset_the_timer_lim) {
        timer_limit--;
        rate = 0;
        rate_counter = counter_of_presses;
  }

Однако, если вы посмотрите на мой код и увидите, как он рассчитывает, независимо от того, какой может быть ставка, это скоростьокончательный.

   //rate final
  if (Input.GetKeyDown(KeyCode.Space))
     {
       print("case1");
       counter_of_presses++;
       counter_press.text = counter_of_presses.ToString();
       player_heart.transform.localScale += new Vector3(transform.localScale.x + sum, transform.localScale.y + sum, transform.localScale.z);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...