Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 捕捉到Libgdx光标后,光标消失_Java_Libgdx - Fatal编程技术网

Java 捕捉到Libgdx光标后,光标消失

Java 捕捉到Libgdx光标后,光标消失,java,libgdx,Java,Libgdx,我将鼠标设置为“捕捉” 但当此设置打开时,光标消失。 我正在开发一个等轴测2d rts游戏,我真的需要光标被强制留在窗口内,但我显然也需要光标被显示出来。 我正在使用平铺地图绘制地图。我有一个游戏,我在玩家触地或触地的任何地方/任何时候绘制一个点,如果你抓住光标,它将消失,这是预期的行为 要解决此问题,您必须使用纹理、精灵或纹理区域自己绘制鼠标。下面是一个例子: 绘制光标: public class MyCursor { private TextureRegion cursor;

我将鼠标设置为“捕捉”

但当此设置打开时,光标消失。 我正在开发一个等轴测2d rts游戏,我真的需要光标被强制留在窗口内,但我显然也需要光标被显示出来。
我正在使用平铺地图绘制地图。

我有一个游戏,我在玩家触地或触地的任何地方/任何时候绘制一个点,如果你抓住光标,它将消失,这是预期的行为

要解决此问题,您必须使用
纹理
精灵
纹理区域
自己绘制鼠标。下面是一个例子:
绘制光标:

public class MyCursor {

    private TextureRegion cursor;
    private float x, y;

    public MyCursor(TextureRegion cursorRegion) {
        cursor = cursorRegion;
    }

    public void render(SpriteBatch spriteBatch) {
        spriteBatch.begin();
        spriteBatch.draw(cursor, x, y);
        spriteBatch.end();
    }

    public void setPosition(float x, float y) {
        this.x = x;
        this.y = y;
    }
}
public class MyInput extends InputAdapter {

    private OrthographicCamera camera;
    private MyCursor myCursor;

    public MyInput(OrthographicCamera camera, MyCursor myCursor) {
        this.camera = camera;
        this.myCursor = myCursor;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        Vector3 temp = camera.unproject(new Vector3(screenX, screenY, 0));
        myCursor.setPosition(temp.x, temp.y);
        return true;
    }
}
public class MyGame extends Game {

    @Override
    public void create() {
        OrthographicCamera camera = new OrthographicCamera();
        TextureRegion cursorRegion = new TextureRegion(new Texture("myCursor.png"));
        MyCursor cursor = new MyCursor(cursorRegion);
        MyInput myInput = new MyInput(camera, cursor);
        Gdx.input.setInputProcessor(myInput);
    }
}
处理输入:

public class MyCursor {

    private TextureRegion cursor;
    private float x, y;

    public MyCursor(TextureRegion cursorRegion) {
        cursor = cursorRegion;
    }

    public void render(SpriteBatch spriteBatch) {
        spriteBatch.begin();
        spriteBatch.draw(cursor, x, y);
        spriteBatch.end();
    }

    public void setPosition(float x, float y) {
        this.x = x;
        this.y = y;
    }
}
public class MyInput extends InputAdapter {

    private OrthographicCamera camera;
    private MyCursor myCursor;

    public MyInput(OrthographicCamera camera, MyCursor myCursor) {
        this.camera = camera;
        this.myCursor = myCursor;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        Vector3 temp = camera.unproject(new Vector3(screenX, screenY, 0));
        myCursor.setPosition(temp.x, temp.y);
        return true;
    }
}
public class MyGame extends Game {

    @Override
    public void create() {
        OrthographicCamera camera = new OrthographicCamera();
        TextureRegion cursorRegion = new TextureRegion(new Texture("myCursor.png"));
        MyCursor cursor = new MyCursor(cursorRegion);
        MyInput myInput = new MyInput(camera, cursor);
        Gdx.input.setInputProcessor(myInput);
    }
}
也不要忘记启用输入:

public class MyCursor {

    private TextureRegion cursor;
    private float x, y;

    public MyCursor(TextureRegion cursorRegion) {
        cursor = cursorRegion;
    }

    public void render(SpriteBatch spriteBatch) {
        spriteBatch.begin();
        spriteBatch.draw(cursor, x, y);
        spriteBatch.end();
    }

    public void setPosition(float x, float y) {
        this.x = x;
        this.y = y;
    }
}
public class MyInput extends InputAdapter {

    private OrthographicCamera camera;
    private MyCursor myCursor;

    public MyInput(OrthographicCamera camera, MyCursor myCursor) {
        this.camera = camera;
        this.myCursor = myCursor;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        Vector3 temp = camera.unproject(new Vector3(screenX, screenY, 0));
        myCursor.setPosition(temp.x, temp.y);
        return true;
    }
}
public class MyGame extends Game {

    @Override
    public void create() {
        OrthographicCamera camera = new OrthographicCamera();
        TextureRegion cursorRegion = new TextureRegion(new Texture("myCursor.png"));
        MyCursor cursor = new MyCursor(cursorRegion);
        MyInput myInput = new MyInput(camera, cursor);
        Gdx.input.setInputProcessor(myInput);
    }
}

为什么光标需要停留在窗口内?例如,如果用户想要关闭或最小化窗口,他们可以随时选择alt tab或退出。我只需要一个帝国时代的风格设置。谢谢!我不得不将myCursosr.render(spriteBatch)添加到渲染循环中,现在它可以工作了!