新屏幕不接收触地事件

New screen doesn't receive touchdown event

我有一个从主菜单打开的屏幕。屏幕显示正确,但事件触地得分不起作用,如果我只使用游戏 class 它可以工作,但在新屏幕中代码不会执行....抱歉,如果这是一个愚蠢的问题,但是我真的是 libgdx 的新手......这是代码....

public class GameScreen implements  ApplicationListener, InputProcessor,Screen {

    private BitmapFont font;
    SpriteBatch batch;

    private Stage stage;
    private Sound mp3Sound;

    public GameScreen() {
        super();
        System.out.println("costruttore");
        Gdx.input.setCatchBackKey(true);

        batch = new SpriteBatch();

        stage = new Stage();
        Gdx.input.setInputProcessor(this);
        render();

    }


    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            System.out.println("touchDown");   
        }
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        System.out.println("touchup");
        return false;
    }


    public boolean touchDragged(int screenX, int screenY, int pointer) {
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }


    public boolean scrolled(int amount) {
        return false;
    }

    private boolean checkcollision(Rectangle attore1, Rectangle attore2) {

        System.out.println("checkcollisions........");
        mp3Sound.play();
        return flagcollision;
    }


    public boolean keyDown(int keycode) {
        if (keycode == Input.Keys.BACK) {            
            Gdx.app.exit();                 }
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        return false;
    }


    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        System.out.println("render gioco");
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();


        stage.act(Gdx.graphics.getDeltaTime());
        stage.getBatch().begin();
        stage.getBatch().draw(img, 0, 0, Gdx.graphics.getWidth() / 10, Gdx.graphics.getHeight());

        stage.getBatch().end();
        stage.draw();
        batch.end();
    }

    @Override
    public void create() {

    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {

    }



}

改变你的触地方式return值

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
         System.out.println("touchDown");   

    return true;
}

首先,您不能随心所欲地调用 render,您必须让 UI 线程处理它。其次,我想这就是您所说的 "second" 屏幕? applicationListener 不能有多个屏幕。

基本上我会做的是(伪代码):

public class GameClass implements Game/ApplicationListener
public class ScreenOne implements Screen, InputProcessor
public class ScreenTwo implements Screen, InputProcessor

在 onCreate() 中设置 GameClass setScreen(screenOne) 在 OnClick/touchUp 函数中让 ScreenOne 调用 setScreen(screenTwo) 放 Gdx.input.setInputProcessor(这个);在两个屏幕的 show() 中