2016-02-19 26 views
2

通過以下對堆棧溢出this解決方案,我想出了下面的Java類:製作屏幕在LibGDX通過按PRT血肌酐按鈕

public final class Screenshot { 

    private static byte[] pixels; 
    private static Pixmap pixmap; 

    public static void take() { 
     pixels = ScreenUtils.getFrameBufferPixels(0, 0, 
       Gdx.graphics.getBackBufferWidth(), 
       Gdx.graphics.getBackBufferHeight(), 
       true); 

     pixmap = new Pixmap(Gdx.graphics.getBackBufferWidth(), 
       Gdx.graphics.getBackBufferHeight(), 
       Pixmap.Format.RGBA8888); 

     BufferUtils.copy(pixels, 0, pixmap.getPixels(), pixels.length); 
     PixmapIO.writePNG(Gdx.files.external("./screenshot_" + new Date().getTime() + ".png"), pixmap); 

     pixmap.dispose(); 
     pixels = null; 
    } 
} 

調用Screenshot().take()將採取LibGDX渲染緩衝和轉儲它一個PNG文件。正是我想要的。

我的問題是如果有'捕捉'打印屏幕按鈕的好方法。有我可以使用的打印屏幕鍵碼嗎?

+0

使用[key bindings](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)與此關鍵代碼:http://stackoverflow.com/a/10793610/300257 –

+0

@GilbertLeBlanc感謝您的評論!你能否請教我如何正確使用代碼示例作爲答案?如果你能爲我做到這一點,我可以接受它作爲答案。 –

回答

2

看來,在LibGDX 你不能

正在檢查的鍵盤輸入的方式是

Gdx.input.isKeyPressed(key) 

其中keyKeys不包括prtscr按鈕的對象。

更重要的是 - 在對象是整數,所以我試圖通過檢查找出什麼是prtsrc的按鈕代碼:

uiStage.addListener(new ClickListener() 
    { 
     @Override 
     public boolean keyDown(InputEvent event, int keycode) 
     { 
      System.out.println(keycode); 
      return true; 
     } 
    }); 

,我在我的電腦上得到。我已經查了一下是類通過打印

System.out.println(Input.Keys.toString(42)); 

,結果是Unknown。老實說,我很驚訝,但似乎LibGDX不支持PRINT_SCREEN按鈕。

有可能是到ommit LibGDX機制,並使用特定於平臺的功能來檢查的方式,如果被點擊prtsrc(網上說,這是ASCII碼爲),但LibGDX自己的答案似乎是 - 沒有方法來做到這一點。

+0

這絕對是無計劃的...我現在想知道是否缺少實現有其背後的某種原因...我想知道... –

+0

我的腦海裏想的是,也許因爲prtscr按鈕不可用,例如, android虛擬鍵盤或它可以在不同的設備上有所不同 - 也許值得問libgdx製作團隊 - 我相信他們會解釋 –