如何在libgdx android中拖动indivudual纹理

如何在libgdx android中拖动indivudual纹理,android,libgdx,Android,Libgdx,我在2d场景中绘制了两个纹理。我想分别拖动它们。当触摸和拖动它们时,我希望将两个纹理拖动到每个点。它是如何单独拖动它们的,或者是否有其他方法可以实现。因为我是libgdx的初学者 我的代码: public class MyGdxGame implements ApplicationListener{ OrthographicCamera camera; ShapeRenderer shapeRenderer; float screenOffset=10,circleRadius=30; Te

我在2d场景中绘制了两个纹理。我想分别拖动它们。当触摸和拖动它们时,我希望将两个纹理拖动到每个点。它是如何单独拖动它们的,或者是否有其他方法可以实现。因为我是libgdx的初学者

我的代码:

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计算拖动对象的位置


很抱歉没有编写完整的解决方案,但是如果有了这些信息,你就可以解决你的问题,我相信你迟早会制作出你想要的游戏