Libgdx 触摸并拖动屏幕上的任意位置以移动精灵
Libgdx touch and drag anywhere onscreen to move sprite
目前我正在使用 scene2d 触摸板在屏幕上移动精灵。我想做的是将整个屏幕用作触摸板来移动精灵,但不知道从哪里开始。
- 如果屏幕刚被触摸,精灵不应该移动。
- 精灵应该根据用户将手指从初始触摸点移开的距离以不同的速度移动。
- 一旦用户拖动了他们的
手指超出一定半径,精灵将继续移动
恒速.
基本上它是一个触摸板,没有实际使用 scene2d 触摸板
基本上你在评论中得到了答案。
- 使用输入处理器
- 触摸时保存触摸位置
- 在触摸拖动时检查保存的触摸位置和当前触摸位置之间的距离
一小段代码作为示例:
class MyInputProcessor extends InputAdapter
{
private Vector2 touchPos = new Vector2();
private Vector2 dragPos = new Vector2();
private float radius = 200f;
@Override
public boolean touchDown(
int screenX,
int screenY,
int pointer,
int button)
{
touchPos.set(screenX, Gdx.graphics.getHeight() - screenY);
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer)
{
dragPos.set(screenX, Gdx.graphics.getHeight() - screenY);
float distance = touchPos.dst(dragPos);
if (distance <= radius)
{
// gives you a 'natural' angle
float angle =
MathUtils.atan2(
touchPos.x - dragPos.x, dragPos.y - touchPos.y)
* MathUtils.radiansToDegrees + 90;
if (angle < 0)
angle += 360;
// move according to distance and angle
} else
{
// keep moving at constant speed
}
return true;
}
}
最后,您可以随时查看 libgdx 类 的来源,看看它是如何完成的。
目前我正在使用 scene2d 触摸板在屏幕上移动精灵。我想做的是将整个屏幕用作触摸板来移动精灵,但不知道从哪里开始。
- 如果屏幕刚被触摸,精灵不应该移动。
- 精灵应该根据用户将手指从初始触摸点移开的距离以不同的速度移动。
- 一旦用户拖动了他们的 手指超出一定半径,精灵将继续移动 恒速.
基本上它是一个触摸板,没有实际使用 scene2d 触摸板
基本上你在评论中得到了答案。
- 使用输入处理器
- 触摸时保存触摸位置
- 在触摸拖动时检查保存的触摸位置和当前触摸位置之间的距离
一小段代码作为示例:
class MyInputProcessor extends InputAdapter
{
private Vector2 touchPos = new Vector2();
private Vector2 dragPos = new Vector2();
private float radius = 200f;
@Override
public boolean touchDown(
int screenX,
int screenY,
int pointer,
int button)
{
touchPos.set(screenX, Gdx.graphics.getHeight() - screenY);
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer)
{
dragPos.set(screenX, Gdx.graphics.getHeight() - screenY);
float distance = touchPos.dst(dragPos);
if (distance <= radius)
{
// gives you a 'natural' angle
float angle =
MathUtils.atan2(
touchPos.x - dragPos.x, dragPos.y - touchPos.y)
* MathUtils.radiansToDegrees + 90;
if (angle < 0)
angle += 360;
// move according to distance and angle
} else
{
// keep moving at constant speed
}
return true;
}
}
最后,您可以随时查看 libgdx 类 的来源,看看它是如何完成的。