新屏幕不接收触地事件
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() 中
我有一个从主菜单打开的屏幕。屏幕显示正确,但事件触地得分不起作用,如果我只使用游戏 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() 中