Estoy tratando de hacer que un objeto aparezca donde la persona tocó por última vez. Sin embargo, cuando intento hacerlo, aparece en el lugar equivocado. Asumo que esto es debido al hecho de las coordenadas que devuelve la entrada es diferente a las coordenadas de la pantalla, mi código es el siguiente:Aplicar coordenadas de píxeles a Coordenadas de pantalla
public class Core implements ApplicationListener, InputProcessor
{ //Has to be here otherwise the code formatting becomes buggy
private Mesh squareMesh;
private PerspectiveCamera camera;
private Texture texture;
private SpriteBatch spriteBatch;
Sprite sprite;
float moveX = 0;
private final Matrix4 viewMatrix = new Matrix4();
private final Matrix4 transformMatrix = new Matrix4();
@Override
public void create()
{
Gdx.input.setInputProcessor(this);
texture = new Texture(Gdx.files.internal("door.png"));
spriteBatch = new SpriteBatch();
sprite = new Sprite(texture);
sprite.setPosition(0, 0);
viewMatrix.setToOrtho2D(0, 0, 480, 320);
float x = 0;
float y = 0;
}
@Override
public void dispose()
{
}
@Override
public void pause()
{
}
@Override
public void render()
{
viewMatrix.setToOrtho2D(0, 0, 480, 320);
spriteBatch.setProjectionMatrix(viewMatrix);
spriteBatch.setTransformMatrix(transformMatrix);
spriteBatch.begin();
spriteBatch.disableBlending();
spriteBatch.setColor(Color.WHITE);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
//spriteBatch.draw(texture, 0, 0, 1, 1, 0, 0, texture.getWidth(),
// texture.getHeight(), false, false);
sprite.draw(spriteBatch);
spriteBatch.end();
update();
}
@Override
public void resize(int width, int height)
{
float aspectRatio = (float) width/(float) height;
camera = new PerspectiveCamera(67, 2f * aspectRatio, 2f);
}
@Override
public void resume()
{
}
public void update()
{
float delta = Gdx.graphics.getDeltaTime();
if(Gdx.input.isTouched())
{
Vector3 worldCoordinates = new Vector3(sprite.getX(), sprite.getY(), 0);
camera.unproject(worldCoordinates);
sprite.setPosition(Gdx.input.getX(), Gdx.input.getY());
float moveX = 0;
float moveY = 0;
}
}
Coseché este código en aras de simplicty. También hice un video que demuestra el error: http://www.youtube.com/watch?v=m89LpwMkneI
Esta debería ser la respuesta correcta. – HAL9000
Intenté la solución aceptada, pero se vuelve muy engorroso una vez que cambia la resolución de su pantalla. Este es el camino a seguir si no desea reescribir todos los cálculos requeridos. – MxyL
He cambiado la respuesta aceptada. Esto fue publicado después de que aceptaría la primera respuesta. – Derek