2012-03-18 120 views
2

进出口检验libgdx但我被陷在用户输入处理。使用Gdx.input直接从渲染方法libgdx - 演员输入事件不触发

我的第一次尝试,但我觉得自己像重新发明轮子因为我写了很多的代码来检测时,我得到的触摸事件的输入区域。

我几乎可以肯定有更好的方式应该使用演员类,但有件事情我必须错becase的事件永远不会火做。

这里是我的代码:

... 
    Texture texture = new Texture(Gdx.files.internal("assets/sprite-sheet.png")); 
      singlePlayerButton = new Image("SinglePlayerButton", new TextureRegion(texture,0,0,50,50)){ 

       @Override 
       public boolean touchDown(float x, float y, int pointer) { 
        // TODO Auto-generated method stub 
        System.out.println("touch down"); 
        return super.touchDown(x, y, pointer); 
       } 

       @Override 
       public void touchUp(float x, float y, int pointer) { 
        System.out.println("touch up");    
       } 

      }; 

      stage.addActor(singlePlayerButton); 
... 

public void render(float delta) { 
     // Clear the screen 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);   
     stage.draw(); 
     spriteBatch.end(); 
    } 

图像显示良好,但没关系我就可以点击多少次,我从来没有得到过触发的事件。我错过了什么?注册事件?我在Stage或Actor类中找不到任何addTouchListener()方法。

谢谢!

回答

16

你必须注册libGDX所有输入处理器。舞台实现InputProcessor,所以你必须注册它:

@Override 
public void create() { 
    //... initialization 

    Gdx.input.setInputProcessor(stage); 
} 
+0

谢谢兄弟,这是一个愚蠢的问题,但这个游戏引擎剧照缺乏从好的文档(这不是针对发动机评论家,说实话,我认为这是一个很棒的项目)。我可以随时用不同的阶段覆盖这个输入处理器吗? – rsan 2012-03-18 18:11:47

+2

您可以使用InputMultiplexer这一点。您可以根据需要添加/删除InputProcessors到多路复用器。或者只需在需要时设置另一个InputProcessor。 – Ludevik 2012-03-18 19:07:55

+0

TNX,可以完美运行:) – rsan 2012-03-18 23:09:52