为了账号安全,请及时绑定邮箱和手机立即绑定

通过触摸屏幕移动矩形

通过触摸屏幕移动矩形

潇潇雨雨 2021-04-14 21:18:15
我想移动具有不同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;    }}
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

要进行拖动,您需要记住手指最后一次触摸屏幕的位置,以便获得手指增量。另外,如果只需要调用一次,则避免将代码放入循环迭代中。一遍又一遍地为每个DownBlock取消投影屏幕的触摸点是很浪费的。


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;

    }

}

不过,我不建议您使用整数单位作为坐标。如果您要进行像素画,则建议使用浮点数来存储坐标,并且仅在绘制时才对坐标进行四舍五入。这将减少看起来像生涩的运动。如果您不使用像素图,我将一直使用浮动坐标。这是一篇很好的文章,可以帮助您理解单位。


查看完整回答
反对 回复 2021-04-28
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信