Ho uno schermo (BaseScreen implementa l'interfaccia Schermo) che rende un'immagine PNG. Al clic dello schermo, sposta il personaggio nella posizione toccata (a scopo di test).libgdx differenze di sistema di coordinate tra il rendering e l'input touch
public class DrawingSpriteScreen extends BaseScreen {
private Texture _sourceTexture = null;
float x = 0, y = 0;
@Override
public void create() {
_sourceTexture = new Texture(Gdx.files.internal("data/character.png"));
}
.
.
}
Durante il rendering dello schermo, se l'utente ha toccato lo schermo, afferro le coordinate del tocco, e quindi utilizzare questi per rendere l'immagine del carattere.
@Override
public void render(float delta) {
if (Gdx.input.justTouched()) {
x = Gdx.input.getX();
y = Gdx.input.getY();
}
super.getGame().batch.draw(_sourceTexture, x, y);
}
Il problema è le coordinate per il disegno della immagine start dalla posizione inferiore sinistra (come indicato nella LibGDX Wiki) e le coordinate per il tocco ingresso inizia dall'angolo in alto a sinistra. Quindi il problema che sto avendo è che clicco in basso a destra, sposta l'immagine in alto a destra. Le mie coordinate potrebbero essere X 675 Y 13, che al tocco sarebbe vicino alla parte superiore dello schermo. Ma il personaggio mostra in basso, poiché le coordinate iniziano da in basso a sinistra.
Perché è cosa? Perché i sistemi di coordinate sono invertiti? Sto usando gli oggetti sbagliati per determinare questo?
Ci sono un sacco di tali domande là fuori e un sacco di risposte che dicono che devi fare camera.unproject, ma io quando stavo iniziando con libGDX ho semplicemente non sapevano cosa fare poi (cioè, usare la nuove coordinate vettoriali). Questa è l'unica risposta che ho trovato allora specifica questo, così tante, molte grazie, ottima risposta! –