天天看點

《Java 2D遊戲程式設計入門》—— 1.4 建立定制的渲染線程

本節書摘來異步社群《java 2d遊戲程式設計入門》一書中的第1章,第1.4節,作者:【美】timothy wright(萊特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

除了使用前面的代碼來執行定制的渲染外,還需要一個定制的渲染線程。為了隻是關注線程問題,位于<code>javagames.render</code>包中的<code>renderthreadexample</code>實際上不會在螢幕上繪制任何内容,它隻是在渲染代碼應該出現的地方列印出“game loop”。下面的示例将<code>renderthreadexample</code>和前面的代碼組合起來,建立了一個主動渲染的應用程式。

在renderthreadexample中,首先需要注意的是,它實作了一個可運作的接口。這個可運作的接口包含一個單個的方法,即<code>public void run()</code>。這個方法包含了渲染循環,并且它隻調用一次。當它傳回的時候,線程結束并且不能再次使用。為了防止run方法中的代碼在程式完成之前退出,boolean類型的running變量保持run方法重複運作。

app.addwindowlistener( new windowadapter() {

  public void windowclosing( windowevent e ) {

    app.onwindowclosing();

  }

});<code>`</code>

要關閉渲染線程,running變量應設定為false。然而,渲染線程可能隻是讀取running變量的值,并且進入睡眠。要確定該線程已經停止了,應調用join()方法。該方法将會等待,直到該線程結束,并且run方法已經傳回。如果沒有向join()方法傳入一個逾時值,将會線上程結束前造成阻塞,是以,如果沒有提供逾時值的話,請確定線程将會結束。

最後,必須通過手動調用system.exit(0)來關閉程式。之前,當在jframe中設定jframe.exit_on_close标志的時候,程式将會結束。這時應用程式負責處理關閉,隻有在調用了exit方法的時候,程式才會結束。如果應用程式在關閉後挂起,通常是因為程式員忘了調用system.exit()。