Ho chiesto questo al forum libgdx, ma non ha ottenuto una risposta quindi speravo y'all mi potrebbe aiutare:Scene2d - ruotato attore non tradotte come previsto
Ho attori che rappresentano pezzi del gioco. Quello che sto cercando di fare è farlo in modo che il giocatore possa fare clic e trascinare la tessera per spostarla sullo schermo e ruotarla più volte prima di inviare il comando placeTile. Da quanto ho capito di DragAndDrop, non sembra essere stato progettato pensando al mio caso d'uso, quindi ho pensato di collegare un ascoltatore dragListener a ogni pezzo di gioco (codice sotto). Funziona bene per il trascinamento, tranne che non riesco a capire come impostare la 'distanza minima prima che la resistenza inizi' a 0 ... ma questa non è la mia domanda principale (anche se eventuali approfondimenti sarebbero apprezzati)
In ogni caso, il il grosso problema arriva quando ruoto l'attore, e poi provo a trascinarlo: con una rotazione di 30 gradi, il trascinamento si comporta quasi come normale: a 60 gradi, i movimenti molto piccoli del mouse mandano l'attore a muoversi molto velocemente in un cerchio ristretto. Altri 30 gradi, l'attore tessera esce dallo schermo in 1-2 fotogrammi, muovendosi in un ampio arco. Se l'attore viene ruotato in senso orario, i suoi movimenti sono in senso orario; stesso motivo per antiorario.
Sembra che la traduzione dell'attore stia prendendo in considerazione la rotazione; Credo che la mia domanda sia: è possibile ruotare un attore/gruppo senza che la rotazione influenzi le traduzioni future? In alternativa, c'è un modo migliore per trascinare un attore sullo schermo in base all'input touch/mouse? Ho incluso un codice di seguito: immagino che sto strizzando qualcosa di fondamentale, ma non riesco a capire che cosa:
// 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);
}
});
E per l'ascoltatore che si occupa di rotazione tramite scorrimento rotella del mouse:
multiplexer.addProcessor(new InputAdapter() {
@Override
public boolean scrolled(int amt) {
if (chosenTileActor == null)
return false;
else
chosenTileActor.rotate(amt * 30);
return true;
}
});
Eventuali puntatori? Sto forse andando nella giusta direzione usando DragListener?
Grazie per la lettura!
Questo ha funzionato perfettamente, grazie! –
Osserva il metodo 'setTapSquareSize'. Se lo desideri, impostalo su 0F. – Alexmelyon