Как обработать единство нескольких касаний - PullRequest
0 голосов
/ 02 ноября 2018

Я довольно новый программист, и после изучения основ C # я пытаюсь приступить к разработке игр с Unity. Сейчас я пишу небольшую мобильную игру. Я хочу добавить одноэкранный мультиплеер к нему. У меня был простой сценарий, который собирал начальную и конечную позиции свайпа и вычислял путь между двумя точками. затем он сравнил абсолютное значение Δx с абсолютным значением Δy и, наконец, проверяет, находится ли координата ниже или выше 0. Это работает довольно хорошо, но, очевидно, это не сработает для моего запланированного многопользовательского режима с одним экраном. Сначала я попробовал проверить, находится ли начальная точка пролистывания слева или справа от центра экрана. это также работало довольно хорошо, но, очевидно, не могло отследить два удара одновременно. Затем я попытался изменить переменные на массивы и добавить for (позже цикл foreach). теперь всякий раз, когда я провожу в одном направлении, он повторяет сигнал каждый кадр, даже если я очищаю слот в массиве в начале цикла ... после буквально полутора дней пробовать вещи и искать ответы, которые я сейчас нашел добавить мой собственный вопрос. заранее спасибо.

public class HopefullyWorkingSwipeDetector
{
    Vector2[] av2_TouchPos1L = new Vector2[5];
    Vector2[] av2_TouchPos2L = new Vector2[5];
    Vector2[] av2_TouchPathL = new Vector2[5];
    public int[] aint_TouchDirectionL = new int[5]; // Up: 0; Down: 1; Right: 2; Left: 3; n/a: 4;
    public int int_SwipePendingL;

    public int int_CountTouchesL = 0;

    public void ListenForSwipeP1()
    {
        int_CountTouchesL = 0;
        int_SwipePendingL = 0;

        foreach (Touch touch in Input.touches)
        {
            if (Input.touchCount > 0 && Input.GetTouch(int_CountTouchesL).phase == TouchPhase.Began && Input.GetTouch(int_CountTouchesL).position.x < Screen.width / 2)
            {
                int_SwipePendingL = int_CountTouchesL;
                av2_TouchPos1L[int_SwipePendingL] = Input.GetTouch(int_SwipePendingL).position;
            }
            else if (Input.touchCount > 0 && Input.GetTouch(int_SwipePendingL).phase == TouchPhase.Ended && Input.GetTouch(int_SwipePendingL).position.x < Screen.width / 2)
            {
                av2_TouchPos2L[int_SwipePendingL] = Input.GetTouch(int_SwipePendingL).position;
                av2_TouchPathL[int_SwipePendingL] = av2_TouchPos2L[int_SwipePendingL] - av2_TouchPos1L[int_SwipePendingL];

                if (Mathf.Abs(av2_TouchPathL[int_SwipePendingL].x) < Mathf.Abs(av2_TouchPathL[int_SwipePendingL].y)) //Vertical
                {
                    if (av2_TouchPathL[int_SwipePendingL].y > 0) //up
                    {
                        aint_TouchDirectionL[int_SwipePendingL] = 0;
                    }
                    else if (av2_TouchPathL[int_SwipePendingL].y < 0) //Down
                    {
                        aint_TouchDirectionL[int_SwipePendingL] = 1;
                    }

                }
                else if (Mathf.Abs(av2_TouchPathL[int_SwipePendingL].x) > Mathf.Abs(av2_TouchPathL[int_SwipePendingL].y)) //horizontal
                {
                    if (av2_TouchPathL[int_SwipePendingL].x > 0) //Right
                    {
                        aint_TouchDirectionL[int_SwipePendingL] = 2;
                    }
                    else if (av2_TouchPathL[int_SwipePendingL].x < 0) //left
                    {
                        aint_TouchDirectionL[int_SwipePendingL] = 3;
                    }
                }
            }
            else
            {
                aint_TouchDirectionL[int_CountTouchesL] = 4;
            }



            int_CountTouchesL++;
        }
    }


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