java - Android/Libgdx 如何解决这个问题?

标签 java android libgdx

目前我正在编写一款游戏,您可以在其中移动一艘宇宙飞船并尝试避开小行星。当用户触摸宇宙飞船时,它应该移动,并跟随用户手指的移动。 宇宙飞船是一个四处移动的 Sprite :

if (Gdx.input.isTouched()) {  

    x = Gdx.input.getX() - width / 2;
    y = -Gdx.input.getY() + height / 2;

} 

我现在遇到的问题是用户可以通过触摸屏幕来传送宇宙飞船。我怎样才能解决这个问题?可以设置触摸区域吗?

最佳答案

计算从船舶到触摸点的单位 vector 方向并将其乘以速度。您需要通过相机取消投影将触摸坐标转换为世界坐标。

private static final float SHIP_MAX_SPEED = 50f; //units per second
private final Vector2 tmpVec2 = new Vector2();
private final Vector3 tmpVec3 = new Vector3();

//...

if (Gdx.input.isTouched()) {  
    camera.unproject(tmpVec3.set(Gdx.input.getX(), Gdx.input.getY(), 0)); //touch point to world coordinate system.
    tmpVec2.set(tmpVec3.x, tmpVec3.y).sub(x, y); //vector from ship to touch point
    float maxDistance = SHIP_MAX_SPEED * Gdx.graphics.getDeltaTime(); //max distance ship can move this frame
    if (tmpVec2.len() <= maxDistance) {
        x = tmpVec3.x;
        y = tmpVec3.y;
    } else {
        tmpVec2.nor().scl(maxDistance); //reduce vector to max distance length
        x += tmpVec2.x;
        y += tmpVec2.y;
    }
}

关于java - Android/Libgdx 如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38768543/

相关文章:

android - 如何从android中的日期选择器获取日期?

android - AsyncTask 第一次执行时花费太多时间

java - Android Studio 损坏的项目

java - Libgdx 设置正交相机

java - 我创建了用于控制 swing 中的图像的代码,但我看不到任何东西,为什么?

java - 从 Unix Epoch 转换为 Java 中的日期和时间

java - 如何在不使用任何加密格式的情况下使用 "PUSH"检索 Firebase 中的子数据

java - Libgdx - 加载字体会减慢游戏速度

Java 错误 : cannot find symbol: method join(java. lang.String,java.lang.String[])

java - @XmlTransient 用于序列化但不用于反序列化?