Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android/Libgdx如何解决这个问题?_Java_Android_Libgdx - Fatal编程技术网

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

Java Android/Libgdx如何解决这个问题?,java,android,libgdx,Java,Android,Libgdx,目前,iam正在一个游戏中编程,你可以移动一艘宇宙飞船并试图避开小行星。当用户触摸太空船时,它应该移动,因此跟随用户的手指移动。 宇宙飞船是一个精灵,它以以下方式在周围移动: if (Gdx.input.isTouched()) { x = Gdx.input.getX() - width / 2; y = -Gdx.input.getY() + height / 2; } 我现在遇到的问题是,用户可以通过触摸屏幕来传送宇宙飞船。我怎样才能解决这个问题?可以设置触摸区

目前,iam正在一个游戏中编程,你可以移动一艘宇宙飞船并试图避开小行星。当用户触摸太空船时,它应该移动,因此跟随用户的手指移动。 宇宙飞船是一个精灵,它以以下方式在周围移动:

if (Gdx.input.isTouched()) {  

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

} 

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

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

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;
    }
}
私人静态最终浮船最大航速=50f//单位/秒
私有最终向量2 tmpVec2=新向量2();
私有最终向量3 tmpVec3=新向量3();
//...
如果(Gdx.input.isTouched()){
camera.unproject(tmpVec3.set(Gdx.input.getX(),Gdx.input.getY(),0));//接触点到世界坐标系。
tmpVec2.set(tmpVec3.x,tmpVec3.y).sub(x,y);//从船舶到接触点的向量
float maxDistance=SHIP_MAX_SPEED*Gdx.graphics.getDeltaTime();//SHIP可以移动此帧的最大距离

如果(tmpVec2.len()计算从船舶到接触点的单位矢量方向,并将其乘以速度。您需要使用相机取消投影,将接触坐标转换为世界坐标

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;
    }
}
private static final float SHIP_MAX_SPEED=50f;//单位/秒
私有最终向量2 tmpVec2=新向量2();
私有最终向量3 tmpVec3=新向量3();
//...
如果(Gdx.input.isTouched()){
camera.unproject(tmpVec3.set(Gdx.input.getX(),Gdx.input.getY(),0));//接触点到世界坐标系。
tmpVec2.set(tmpVec3.x,tmpVec3.y).sub(x,y);//从船舶到接触点的向量
float maxDistance=SHIP_MAX_SPEED*Gdx.graphics.getDeltaTime();//SHIP可以移动此帧的最大距离

如果(tmpVec2.len()当用户触摸屏幕时首先检查,如果触摸屏幕的位置是宇宙飞船..如果是,则跟随运动如果不是什么都不做首先检查用户触摸屏幕时,如果触摸屏幕的位置是宇宙飞船..如果是,则跟随运动如果不是什么都不做