Как удалить / удалить текст кнопки при нажатии кнопки проверки? - PullRequest
0 голосов
/ 22 января 2019

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

Моя проблема заключается в том, что после ответа на первый вопрос кнопка ответа сбрасывается на пустое, но когда пользователь вводит следующий ответ, удаляется только один последний алфавит (например, 5 из 15). и когда я набираю 14, он показывает 114 (1 из ранее набранного ответа).

Мне нужна помощь, чтобы сбросить текст кнопки ответа на пустой.

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

Может кто-нибудь помочь мне в этом? Также скажите мне, если это правильный метод для достижения того, что я хочу.

Я вызываю функцию возврата, чтобы удалить предыдущий ответ, а также устанавливаю текст пустым.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Keyboard : MonoBehaviour
{
    string word = null;
    int wordIndex = -1;
    string alpha = null;
    string alpha2 = null;
    public Text userAnswer1 = null;
    public Text valueA, valueB;
    public Text scoreCount;
    private int a, b, answer1, score;
    char[] nameChar = new char[5];


    private void Start()
    {          
        SumCreator();
    }

    public void nameFunc (string alphabet)
    {
        wordIndex++;
        char[] keepchar = alphabet.ToCharArray();
        nameChar[wordIndex] = keepchar[0];
        alpha = nameChar[wordIndex].ToString();
        word = word + alpha;
        userAnswer1.text = word;      
    }

    public void BackspaceFunction()
    {
        if (wordIndex >= 0)
        {
            wordIndex--;

            alpha2 = null;
            for (int i = 0; i < wordIndex + 1; i++)
            {
                alpha2 = alpha2 + nameChar[i].ToString();
            }
            word = alpha2;
            userAnswer1.text = word;
        }
    }

    public void SumCreator ()
    {
        a = Random.Range(0,15);
        b = Random.Range(0,15);
        answer1 = a + b;
        valueA.text = a.ToString();
        valueB.text = b.ToString();
        scoreCount.text = "score " + score.ToString();
    }

    public void CheckAnswer()
    {
        Text buttonText = userAnswer1.GetComponentInChildren<Text>();

        if (answer1 == int.Parse(userAnswer1.text))
        {
            score++;
            // userAnswer1.text = string.Empty;
            buttonText.text = string.Empty;
        }  

        SumCreator();
    }
}

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я отредактировал свой ответ и удалил уже не относящиеся к делу части.

После нажатия кнопки «Проверить» сначала удалите текст в текстовом поле результата, а затем выполните всю другую логику. Для стирания текста вы можете использовать следующий фрагмент кода:

Text buttonText = buttonName.GetComponentInChildren<Text>();
buttonText.text = string.Empty;

Возможно, вы хотите использовать это свойство "buttonText" как глобальное и получить его один раз, при запуске программы, а не при каждом нажатии кнопки. Это не будет иметь большого значения в небольшой программе, но это правильный способ мышления.

После проверки вашего кода я могу подвести итог вашей проблемы:

Вся логика вашей программы ошибочна, есть много ненужных сложных вещей, которые делают ее неудачной в нескольких местах. Понятно, что все проходят через эту стадию, нечего стыдиться или беспокоиться. В любом случае, это мое субъективное мнение, которое может быть ошибочным.

Возвращаясь к вашему коду, все, что вам нужно сделать, это обновить текст результата, скажем «txtResult», как только что-нибудь произойдет.

После того, как вы щелкнете по номеру, выполните «txtResult + = numberClicked».

Как только вы нажмете клавишу Backspace, удалите последний символ txtResult. Здесь - это вопрос с множеством ответов о том, как это сделать, это действительно просто.

После того, как вы нажмете «Проверить», если это правильный номер, установите txtResult пустым.

Кроме того, каждый раз, когда вы обновляете txtResult, вы, конечно, тоже должны обновлять пользовательский интерфейс. Допустим, вы делаете это каждый раз, это будет одна строка для обновления txtResult и одна строка для обновления пользовательского интерфейса для каждого из 3 приведенных выше случаев. Итак, всего 6 строк. Проверка на пустую строку в то время как в функции «Backspace» добавляет еще одну строку. Моя математика может быть неправильной, но в любом случае, это довольно короткий и простой подход, ничего особенного.

Вам просто не хватает соответствующих знаний, иначе вы не стали бы делать этот кошмар в своей функции Backspace.

Что касается функции "nameFunc", целые 6 строк можно заменить на "txtResult + = алфавит", не так ли? Я не уверен, что вы получаете в параметре алфавита, но в любом случае, строка - это массив символов, так что вы также можете сделать «txtResult + = alphabet [0]» вместо того, что у вас есть.

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

0 голосов
/ 22 января 2019

Если вы хотите очистить свой текстовый объект после успешного ввода ответа, не следует вызывать функцию «BackSpace».

Просто замените ваш код следующим:

if (answer1 == int.Parse(userAnswer1.text))
{
    score++;
    userAnswer1.text = string.Empty;

Это очистит текстовый элемент.

Вы также можете ознакомиться с использованием InputFields в Unity, которые предназначены для ввода ввода и автоматически поддерживают клавишу Backspace и другие функции клавиатуры. Если вы это сделаете, убедитесь, что вы установили для ContentFype InputField либо целое число, либо десятичное число

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