触摸屏幕移动矩形[英] Move rectangle by touching the screen

问题描述

我想通过减小 x 位置来移动具有不同 x 位置的块而不改变它们的形状.

我尝试运行以下代码,但似乎块移动到拖曳位置的方式以快速(正确的药水和其他我看不到哪里).

downBlocks=new Arraylist<Rectangle>;
for (DownBlocks downBlocks:getBlocks()){
    if(Gdx.input.isTouched()) {
        Vector3 touchPos = new Vector3();

        touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
        camera.unproject(touchPos);

        downBlocks.x = (int) touchPos.x - downBlocks.x;
    }
}

推荐答案

要进行拖动,您需要记住手指最后一次触摸屏幕的点,以便获得手指增量.附带说明一下,如果只需要调用一次,请避免将代码放入循环迭代中.为您的每个 DownBlocks 一遍又一遍地取消投影屏幕的触摸点是很浪费的.

static final Vector3 VEC = new Vector3(); // reusuable static member to avoid GC churn
private float lastX; //member variable for tracking finger movement

//In your game logic:
if (Gdx.input.isTouching()){
    VEC.set(Gdx.input.getX(), Gdx.input.getY(), 0);
    camera.unproject(VEC);
}

if (Gdx.input.justTouched())
    lastX = VEC.x; //starting point of drag
else if (Gdx.input.isTouching()){ // dragging
    float deltaX = VEC.x - lastX; // how much finger has moved this frame
    lastX = VEC.x; // for next frame

    // Since you're working with integer units, you can round position
    int blockDelta = (int)Math.round(deltaX);

    for (DownBlocks downBlock : getBlocks()){
        downBlock.x += blockDelta;
    }
}

不过,我不建议您在坐标中使用整数单位.如果您正在做像素艺术,那么我建议使用浮点数来存储坐标,并仅在绘图时对坐标进行四舍五入.这将减少看起来生涩的运动.如果您不使用像素艺术,我会一直使用浮点坐标.这是一篇很好的文章,有助于理解单位.

本文地址:https://www.itbaoku.cn/post/978496.html