2016-01-16 50 views
1

我正在嘗試使Actor句柄同時處理點擊鍵入事件。我初始化演員(在這種情況下,Image)如下:一個演員能處理點擊按鍵事件?

stage = new Stage(); 
texture = new Texture("badlogic.jpg"); 
Image image = new Image(texture); 
image.addListener(new ClickListener() { 
    @Override 
    public void clicked(InputEvent event, float x, float y) { 
     Gdx.app.log("Image ClickListener", "clicked"); 
    } 

    @Override 
    public boolean keyDown(InputEvent event, int keycode) { 
     Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode); 
     return true; 
    } 
}); 
stage.addActor(image); 
Gdx.input.setInputProcessor(stage); 

當我點擊image,在點擊預期事件被觸發,即,我看到了各自的日誌。但是,無論我按什麼鍵,該鍵不會觸發事件。我的問題是:爲什麼?不能在演員能夠同時處理點擊鍵不放事件?

回答

1

默認情況下,你應該相當重視鍵盤監聽的舞臺,因爲舞臺有鍵盤焦點上所以它應該像

stage.addListener(new InputListener() 
    { 
     @Override 
     public boolean keyDown(InputEvent event, int keycode) 
     { 
      Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode); 
      return true; 
     } 
    }); 

如果你想改變的重點是在演員可以通過使用Stage方法setKeyboardFocus(演員演員)做到這一點。它應該是這樣的:

image.addListener(new ClickListener() 
    { 
     @Override 
     public void clicked(InputEvent event, float x, float y) { 
      Gdx.app.log("Image ClickListener", "clicked"); 
     } 

     @Override 
     public boolean keyDown(InputEvent event, int keycode) { 
      Gdx.app.log("Image ClickListener", "keyDown. keycode=" + keycode); 
      return true; 
     } 
    }); 

    stage.setKeyboardFocus(image); 
0

創建擴展Actor類並實現InputProcessor界面的自定義類。

當你設置你的遊戲,使用InputMultiplexer

InputMultiplexer inputMulti = new InputMultiplexer(stage); 
Gdx.input.setInputProcessor(inputMulti); 

然後,在您的自定義類的構造函數,你可以添加實例被創建到複用器如下:

((InputMultiplexer)Gdx.input.getInputProcessor()).addProcessor(this); 

處理按鍵輸入功能,則變得更簡單:而不是使用addListener方法和創建擴展ClickListener等等,等等的匿名內部類,你可以只使用InputProcessor方法,例如:

public boolean keyDown(int keycode) 
{ 
    if (keycode == Keys.SPACE) 
    { 
     // do something 
    } 

    return false; 
} 

這也避免了需要設置鍵盤焦點的演員,如果你有需要處理的鍵盤輸入多個參與者可能不能一概而論好。

然而,注意,該方案是,配置的任何演員作爲輸入處理器將處理所有輸入現在事件,包括不重疊的演員的觸摸事件,並且此行爲可能是不期望的和/或混亂。