Domanda

Questo mi ha stumptato.Non ho idea di cosa stia effettivamente causando il problema, ma cercherò di fornire quante più informazioni pertinenti possibile.Si prega di chiedere se avete domande.

Il metodo advance() viene chiamato circa una volta ogni 0,0025 secondi, che è anche il valore di elapsedTime.

private int speed = 1;

public void advance(float elapsedTime) {
    rectangle.x = (int) (rectangle.x - speed * elapsedTime);
}
.

La coordinata X si sposta a sinistra troppo velocemente, anche se ho impostato la mia velocità a 0,0000001.Tuttavia, ogni volta che provo a spostarlo a destra:

public void advance(float elapsedTime) {
    rectangle.x = (int) (rectangle.x + speed * elapsedTime);
}
.

non si muove affatto.

Qualche idea?Sono scatenato!

È stato utile?

Soluzione

Questo perché le coordinate di rettangoli sono memorizzate come interni, quindi possono solo cambiare, almeno, per 1 alla volta.Dal momento che il tiraggio funziona così spesso, quando si sposta a sinistra, si muove ancora molto veloce, perché non può muoversi a meno di 1 pixel in una volta.

La ragione per cui non si muove a destra è a causa dell'arrotondamento.Quando si getta a un int, il doppio è arrotondato.Quindi se la tua posizione è 5, e tu provi ad aggiungere 0,00001, e quindi gettarlo su un INT, la tua posizione finisce ancora di essere 5. Se dovessi sottrarre 0,000001, allora sarebbe arrotondato a 4, motivo per cui muoversialle opere di sinistra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top