gpt4 book ai didi

java - 通过触摸屏幕移动矩形

转载 作者:行者123 更新时间:2023-12-02 11:04:57 25 4
gpt4 key购买 nike

我想移动具有不同 x 位置的 block ,而不通过减少 x 位置来改变其形状。

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

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;
}
}

最佳答案

要进行拖动,您需要记住手指最后一次触摸屏幕的点,以便获得手指增量。另外,如果只需要调用一次,请避免将代码放入循环迭代中。为每个 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;
}
}

不过,我不建议对坐标使用整数单位。如果您正在制作像素艺术,那么我建议使用 float 来存储坐标,并仅在绘图时对坐标进行四舍五入。这将减少看似生涩的运动。如果你不使用像素艺术,我会一直使用 float 坐标。 Here's a good article帮助理解单位。

关于java - 通过触摸屏幕移动矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com