2015-08-29 8 views
0

Я пытаюсь расширить этот Roll-a-Ball tutorial, включив таймер и разрешив пользователю повторить попытку, нажав на сенсорную панель, выиграют ли они или не хватит времени.Ввод не распознан с сенсорной панели

Это работает, как ожидается, если время истекает (// case A), но нет, если игрок выигрывает (// case B ниже), где кран не распознается. Конечное сообщение появляется в обоих случаях, поэтому он определенно достигает этих частей, но я предполагаю, что программа не доходит до раздела с комментарием // reset on tap, но я не уверен.

Любые идеи оценили.

PlayerController Мой сценарий:

void Start() 
{ 
    timeLeft = 5; 
    rb = GetComponent<Rigidbody>(); 
    count = 0; 
    winText.text = ""; 
    SetCountText(); 
} 
void Update() 
{ 
    if (!gameOver) { 
     timeLeft -= Time.deltaTime; 
    } 
    timerText.text = timeLeft.ToString ("0.00"); 
    if(timeLeft < 0) { 
     winner = false; 
     GameOver(winner); 
    } 
} 
void GameOver(bool winner) 
{ 
    gameOver = true; 
    timerText.text = "-- --"; 
    string tryAgainString = "Tap the touch pad to try again."; 
    if (!winner) { // case A 
     winText.text = "Time's up.\n" + tryAgainString; 
    } 
    if (winner) { // case B 
     winText.text = "Well played!\n" + tryAgainString; 
    } 
    // reset on tap 
    if (Input.GetMouseButtonDown (0)) { 
     Application.LoadLevel(0); 
    } 
} 
void FixedUpdate() 
{ 
    float moveHorizontal = Input.GetAxis ("Mouse X"); 
    float moveVertical = Input.GetAxis ("Mouse Y"); 
    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);  
    rb.AddForce (movement * speed); 
} 
void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.CompareTag ("Pick Up")){ 
     other.gameObject.SetActive (false); 
     count = count + 1; 
     SetCountText(); 
     if (!gameOver) { 
      timeLeft += 3; 
     } 
    } 
} 
void SetCountText() 
{ 
    if (!gameOver) { 
     countText.text = "Count: " + count.ToString(); 
    } 
    if (count >= 12) { 
     winner = true; 
     GameOver(winner); 
    } 
} 

ответ

1

Помещенный debug.log в методе SetCountText и выводить значение счетчика количества. Вероятно, вы, наверное, не достигли отметки в 12 очков. Убедитесь, что все ваши предметы коллекционирования имеют тег «Pick Up».

Обновление Вы должны прослушать вход игрока в Update. FixedUpdate и любые другие функции, выполняемые как часть исправленного обновления, будут пропускать вход игрока, если это произойдет между двумя вызовами FixedUpdate.

Так изменить Update и GameOver метод следующим образом:

void Update() { 
    if (gameOver) { 
     if (Input.GetMouseButtonDown(0)) { 
      Application.LoadLevel(0); 
     } 
    } else { 
     timeLeft -= Time.deltaTime; 
     timerText.text = timeLeft.ToString("0.00"); 
     if (timeLeft < 0) { 
      winner = false; 
      GameOver(winner); 
     } 

    } 

} 
void GameOver(bool winner) { 
    gameOver = true; 
    timerText.text = "-- --"; 
    string tryAgainString = "Tap the touch pad to try again."; 
    if (!winner) { // case A 
     winText.text = "Time's up.\n" + tryAgainString; 
    } 
    if (winner) { // case B 
     winText.text = "Well played!\n" + tryAgainString; 
    } 

} 
+0

Это, безусловно, достигает 12, как сообщение 'Ну Played..' отображается правильно. – Robert

+1

Я вижу проблему. Вы всегда должны проверять вход игрока в «Обновление». Вы проверяете щелчок мыши в OnTirggerEnter> SetCountText-> GameOver(). Таким образом, вы в основном слушаете ввод в вызове FixedUpdate. Через минуту я отредактирую ответ с помощью решения. – Puneet

+0

Отлично, спасибо. – Robert