poprosiłem to na forach libgdx ale nie otrzymałem odpowiedzi więc ja ufałem y'all może mi pomóc:Scene2d - Obrócony aktor nie tlumaczy jak oczekiwano
mam Podmioty reprezentujące pionki. Próbuję zrobić to tak, aby gracz mógł kliknąć i przeciągnąć kafelek, aby przesunąć go po ekranie i obrócić go kilka razy przed przesłaniem polecenia placeTile. Z tego, co rozumiem przez DragAndDrop, nie wydaje mi się, aby był zaprojektowany z myślą o moim przypadku użycia, więc pomyślałem, że zamiast tego do każdego fragmentu gry dołączę detektor dragListener (kod poniżej). Działa dobrze w przypadku przeciągania, ale nie mogę określić, jak ustawić "minimalną odległość przed rozpoczęciem przeciągania" na 0 ... ale to nie jest moje główne pytanie (chociaż wszelkie spostrzeżenia byłyby mile widziane). Duży problem pojawia się, gdy obracam aktora, a następnie próbuję go przeciągnąć: Przy obrocie o 30 stopni, przeciąganie działa prawie jak normalnie: przy 60 stopniach, bardzo małe ruchy myszy wysyłają aktora poruszającego się w ciasnym kole bardzo szybko. Kolejne 30 stopni, aktor kafli wychodzi z ekranu w 1-2 klatkach, poruszając się szerokim łukiem. Jeśli aktor jest obracany zgodnie z ruchem wskazówek zegara, jego ruchy są zgodne z ruchem wskazówek zegara; ten sam wzór dla przeciwnie do ruchu wskazówek zegara.
Wygląda na to, że tłumaczenie aktora uwzględnia rotację; Domyślam się, że moje pytanie brzmi: czy można obrócić aktora/grupę bez rotacji wpływającej na przyszłe tłumaczenia? Alternatywnie, czy istnieje lepszy sposób na przeciągnięcie aktora po ekranie w oparciu o dane wejściowe dotykowe/myszą? I zawarte poniżej kodu: Wyobrażam sobie, ja przekręcane coś podstawowe, ale nie mogę dowiedzieć się, co:
// during initial stage creation
tileActor.setOrigin(tileActor.getWidth()/2, tileActor.getHeight()/2);
tileActor.addListener(new DragListener() {
public void dragStart(InputEvent event, float x, float y,
int pointer) {
chosenTileActor = event.getTarget();
}
public void drag(InputEvent event, float x, float y, int pointer) {
Actor target = event.getTarget();
target.translate(x, y);
}
});
I dla słuchacza, który zajmuje się obrotem poprzez przewijanie kółkiem myszy:
multiplexer.addProcessor(new InputAdapter() {
@Override
public boolean scrolled(int amt) {
if (chosenTileActor == null)
return false;
else
chosenTileActor.rotate(amt * 30);
return true;
}
});
Jakieś wskazówki? Czy idę w dobrym kierunku, używając DragListener?
Dzięki za przeczytanie!
To działało idealnie, dzięki! –
Spójrz na metodę 'setTapSquareSize'. Jeśli chcesz, ustaw go na 0F. – Alexmelyon