【问题标题】:How to drag an indivudual texture in libgdx android如何在 libgdx android 中拖动单个纹理
【发布时间】:2018-08-21 02:27:12
【问题描述】:

我在 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();    
}

【问题讨论】:

    标签: android libgdx


    【解决方案1】:

    好吧,你应该保存纹理的当前位置,然后在更新上,移动纹理以检查鼠标右键是否处于活动状态。这是大体思路,适用于任何框架或代码。

    我建议你将纹理移动到自己的类中,带有位置和纹理的getter和setter,这样很容易管理。

    使用 libdgx 你可以随时检查鼠标是否被点击

    Gdx.input.justTouched();
    

    在每次更新时,您可以检查鼠标的最后位置并计算每次更新时与新位置的差异

    Gdx.input.getX()
    Gdx.input.getY()
    

    要将屏幕内的位置与相机上的位置同步,您应该在相机上使用 unproject,例如:

    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
    

    TL;DR 您需要检查鼠标单击时的最后位置,并在下一次更新时计算差异,然后更新纹理的位置。


    顺便说一句,虽然这是为了当你获得更多经验,你可以创建一个实现 InputProcessor 的类,让 libgdx 处理该类,例如:

    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 计算你拖动的位置。


    很抱歉没有写出完整的解决方案,但如果有了这些信息,您可以解决您的问题,我很确定您迟早能够制作出您想要的游戏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多