如何在libgdx android中拖动indivudual纹理
我在2d场景中绘制了两个纹理。我想分别拖动它们。当触摸和拖动它们时,我希望将两个纹理拖动到每个点。它是如何单独拖动它们的,或者是否有其他方法可以实现。因为我是libgdx的初学者 我的代码:如何在libgdx android中拖动indivudual纹理,android,libgdx,Android,Libgdx,我在2d场景中绘制了两个纹理。我想分别拖动它们。当触摸和拖动它们时,我希望将两个纹理拖动到每个点。它是如何单独拖动它们的,或者是否有其他方法可以实现。因为我是libgdx的初学者 我的代码: public class MyGdxGame implements ApplicationListener{ OrthographicCamera camera; ShapeRenderer shapeRenderer; float screenOffset=10,circleRadius=30; Te
public class MyGdxGame implements ApplicationListener{
OrthographicCamera camera;
ShapeRenderer shapeRenderer;
float screenOffset=10,circleRadius=30;
Texture firstTexture;
Texture secondTexture;
float firstTextureX;
float firstTextureY;
float secondTextureX;
float secondTextureY;
float touchX;
float touchY;
SpriteBatch batch;
@Override
public void create()
{
firstTexture= new Texture("b1.jpg");
firstTextureX = 50;
firstTextureY = 50;
secondTexture = new Texture("b2.jpg");
secondTextureX = 250;
secondTextureY = 250;
batch = new SpriteBatch();
camera=new OrthographicCamera();
shapeRenderer=new ShapeRenderer();
shapeRenderer.setAutoShapeType(true);
}
@Override
public void render()
{
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin();
shapeRenderer.setColor(Color.RED);
shapeRenderer.circle(camera.viewportWidth/2,camera.viewportHeight/2,circleRadius);
shapeRenderer.rect(screenOffset,screenOffset,camera.viewportWidth-2*screenOffset,camera.viewportHeight-2*screenOffset);
shapeRenderer.line(screenOffset,screenOffset,camera.viewportWidth-screenOffset,camera.viewportHeight-screenOffset);
shapeRenderer.line(screenOffset,camera.viewportHeight-screenOffset,camera.viewportWidth-screenOffset,screenOffset);
shapeRenderer.line(screenOffset,camera.viewportHeight/2,camera.viewportWidth-screenOffset,camera.viewportHeight/2);
shapeRenderer.line(camera.viewportWidth/2,screenOffset,camera.viewportWidth/2,camera.viewportHeight-screenOffset);
shapeRenderer.end();
batch.begin();
batch.draw(firstTexture, firstTextureX, firstTextureY);
batch.draw(secondTexture, secondTextureX, secondTextureY);
batch.end();
}
那么,您应该保存纹理的当前位置,并在更新中移动纹理,如果鼠标右键单击处于活动状态,则检查鼠标的移动。这是一个总体思路,适用于任何框架或代码 我建议您将纹理移动到自己的类中,使用位置和纹理的getter和setter,这样很容易管理 使用libdgx,您可以随时使用
Gdx.input.justTouched();
在每次更新中,您可以检查鼠标的最后一个位置,并使用
Gdx.input.getX()
Gdx.input.getY()
要将屏幕内的位置与相机上的位置同步,您应该在相机上使用“取消投影”,例如:
Vector3 mousePos = new Vector3();
mousePos.x = Gdx.input.getX();
mousePos.y = Gdx.input.getY();
mousePos.z = 0;
camera.unproject(mousePos); //this will convert the screen position to your camera position
public class CameraControllerDesktop implements InputProcessor, ControllerListener {
public CameraControllerDesktop() {
Gdx.input.setInputProcessor(this);
}
TL;DR您需要检查鼠标单击时的最后一个位置,并在下一次更新时计算差异,然后更新纹理的位置
顺便说一句,尽管这是为了当您获得更多经验时,您可以创建一个实现InputProcessor的类,以及libgdx要处理的类,例如:
Vector3 mousePos = new Vector3();
mousePos.x = Gdx.input.getX();
mousePos.y = Gdx.input.getY();
mousePos.z = 0;
camera.unproject(mousePos); //this will convert the screen position to your camera position
public class CameraControllerDesktop implements InputProcessor, ControllerListener {
public CameraControllerDesktop() {
Gdx.input.setInputProcessor(this);
}
你可以使用这个功能
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
让libgx计算拖动对象的位置
很抱歉没有编写完整的解决方案,但是如果有了这些信息,你就可以解决你的问题,我相信你迟早会制作出你想要的游戏