2013-07-31 9 views

Odpowiedz

13

Najpierw utwórz teksturę (region) z pełnym okrągłym paskiem postępu. Następnie odkształć kształt (siatkę) złożoną z jednego lub więcej trójkątów, aby dopasować się do rzeczywistego obszaru, który powinien zostać pokazany.

W tym celu pomyśl o linii od środka obrazu do granic obrazu. Oblicz punkt przecięcia (i "ścianę", tzn. Lewą, prawą, górę lub dół obrazu) linii pod danym kątem. To da ci część tekstury (regionu), która musi zostać narysowana.

Na przykład, jeśli linia w spoczynku (kąt wynosi zero) przecina dolną ścianę obrazu pośrodku, obraz jest kwadratowy i chcesz obrócić zgodnie z ruchem wskazówek zegara, a następnie wszystko między 45 a 135 stopni uderza w lewą ścianę , od 135 do 225 stopni trafia w górną ścianę i tak dalej.

Teraz masz kształt, musisz wyrazić go w trójkącie. Lub, aby zachować zgodność z spritebatch libgdx, parzystą liczbę trójkątów. Pamiętaj, aby zaktualizować wartości U i V zgodnie z położeniem wierzchołka.

Prosta implementacja ten temat można znaleźć tutaj: https://github.com/xoppa/world/blob/master/src/com/xoppa/android/misc/RadialSprite.java

+0

Wielkie dzięki za to. Właśnie zaktualizowałem twój kod i podałem sens. Mam nadzieję, że nie masz nic przeciwko: https://gist.github.com/chandujr/5d79f3603efadb566d0a8f7edb5ba0ad – WeirdElfB0y