2016-09-22 5 views
1

안녕하십니까! Slick2d에서 Nifty Gui를 사용하려고합니다. Nifty Gui의 입력 폴링 외에 모든 것이 올바르게 작동합니다. 그것은 전혀 반응하지 않습니다! 여기에 내 코드의 일부입니다Nifty Gui가 입력에 반응하지 않습니다

XML을 :

<nifty xmlns="http://nifty-gui.lessvoid.com/nifty-gui"> 
    <screen id="GamePlay" controller="GamePlayScreenController"> 
     <layer childLayout="vertical"> 
      <panel id="roomListPanel" width="100%" height="32px" 
      childLayout="absolute-inside" padding="5px"> 

       <control id="appendButton" name="button" label="Pause"> 
      <interact onClick="test()" />  
     </control> 
      </panel> 
     </layer> 
    </screen> 
</nifty> 

자바 :

class GamePlayScreenController implements ScreenController { 
    public void bind(Nifty nifty, Screen screen) { 
     System.out.println("Bind"); 
    } 

    public void onEndScreen() { 
     System.out.println("End"); 
    } 

    public void onStartScreen() { 
     System.out.println("Start"); 
    } 

    public void test() { 
     System.out.println("Test"); 
    } 
} 

... 

// In my state class: 

this.nifty = new Nifty(new LwjglRenderDevice(), new NullSoundDevice(),  new LwjglInputSystem(), new TimeProvider()); 

this.nifty.loadStyleFile("nifty-default-styles.xml"); 
this.nifty.loadControlFile("nifty-default-controls.xml"); 
this.nifty.registerScreenController(new GamePlayScreenController()); 
this.nifty.fromXml("data/test.xml", "GamePlay"); 
this.nifty.gotoScreen("GamePlay"); 

... 

this.nifty.update(); 

... 

SlickCallable.enterSafeBlock(); 
this.nifty.render(false); 
SlickCallable.leaveSafeBlock(); 

그렇지 않은 이유는, 아무 생각이 없습니다. 도와주세요! 감사!

답변

0

이 당신을 위해 작동합니다 :

protected void initGameAndGUI(GameContainer arg0, StateBasedGame arg1) { 

    LwjglInputSystem inputSystem = new LwjglInputSystem(); 

    try { 
     inputSystem.startup(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }   
    PlainSlickInputSystem psis = new PlainSlickInputSystem(); 
    GameClient.app.getInput().addListener(psis);  

    prepareNifty(nifty, arg1); 
    nifty = new Nifty(new LwjglRenderDevice(), new NullSoundDevice(),psis, new AccurateTimeProvider()); 
    NullSoundDevice(),psis, new AccurateTimeProvider());  
    initNifty(arg0, arg1, psis);  
    nifty.fromXml("..."); 

} 

및 당연히

nifty.update(); 

당신의 업데이트 방법.

Slick2d Nifty 통합을 사용하고있었습니다.

0

LwjglInputSystem에서 startup() 메서드를 호출 했습니까? 어떻게 호출되는지에 대한 예제 코드는 here입니다. 이는 LwjglInputSystem을 적절하게 초기화하는 데 필요합니다.

그러나 우리가 제공하는 기성품 Slick2d 통합 수업을 사용하지 않는 이유는 무엇입니까? Slick2d Nifty-GUI classes? LWJGL에 직접 의존하지 않고 Nifty GUI를 Slick2d에 쉽게 통합 할 수 있습니다.

+0

감사합니다. 그러나 해결책이 작동하지 않았습니다. 그래, 나는 Nifty + Slick 2d 주를 시도했지만 그들은 나를 도와주지 않았다. 답변 해줘서 고마워! –