2014-10-10 2 views
0

Я следил за видео-гидом Youtube, чтобы сделать игру с астероидами с LibGdx, человеком, который сделал видео, не содержал никаких сенсорных экранов, поскольку они просто делали это для настольной версии. Мне удалось использовать тачпад LibGdx, и у меня он почти работает, но с несколькими проблемами при вращении корабля.Медленно вращающийся объект с использованием тачпада LibGdx

My Touchpad дает значения между - pi и + pi в зависимости от угла (правая сторона равна 0, нижняя - отрицательные значения, верхний - положительный). То же самое касается направления, с которым корабль сталкивается.

Проблема заключается в том, что, когда корабль медленно вращается, если ваш с левой стороны и изменяется с -pi на + pi с помощью тачпада, корабль будет вращаться вокруг длинного пути. Каждое решение этого, что я придумал, вызвало проблему еще где. Мое последнее решение ниже, я думал, работал, но имеет ту же проблему только в другой области.

Радианс находится в направлении корабля в настоящее время. touchPad Направление - это направление, в котором находится тачпад. Оба в радианах.

if (radians < touchPadDirection){ 
     if(radians - touchPadDirection < MathUtils.PI && touchPadDirection > MathUtils.PI /2 && radians < MathUtils.PI /2) { 
      System.out.println("1st choice"); 
      setRight(true); 
      setLeft(false); 
     }else{ 
      System.out.println("3rd choice"); 
      setLeft(true); 
      setRight(false); 
     } 
    } 
    if (radians > touchPadDirection) { 
     if(radians - touchPadDirection > MathUtils.PI && touchPadDirection < MathUtils.PI /2 && radians > MathUtils.PI /2) { 
      System.out.println("2nd choice"); 
      setRight(false); 
      setLeft(true); 
     }else{ 
      System.out.println("4th choice"); 
      setRight(true); 
      setLeft(false);     
     } 
    } 
} 

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

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

ответ

0

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

public void rotate(float touchPadDirection) { 
    if (radians > 0 && touchPadDirection < radians - MathUtils.PI){ 
     setLeft(true); 
     setRight(false); 
    }else if (radians < 0 && touchPadDirection > radians + MathUtils.PI){ 
     setLeft(false); 
     setRight(true); 
    }else if (touchPadDirection > radians){ 
     setLeft(true); 
     setRight(false); 
    }else if (touchPadDirection < radians){ 
     setLeft(false); 
     setRight(true); 
    } 
} 

Как и все решение всегда проще, чем большинство вещей, которые я стараюсь, как и прежде радианы тока облицовочного игрока судна и touchPadDirection является направлением тока он проходит. Если у кого есть еще более простое решение Я все равно хотел бы знать, поскольку, вероятно, буду использовать что-то очень похожее в будущем.