レンダースレッド(Canvas
/ を使用するとOpenGL ES
、Canvas
おそらく設定が少し簡単になります)と、ゲームロジックを配置するゲームスレッドを用意することを強くお勧めします。
ゲームを実際に「ロード」するには、GameEngineクラスを作成し、それをアプリケーションの中心点にすることができます。レンダラーの準備ができたら、GameEngineインスタンスへのコールバックを作成できます。これはRunnable
、レンダリング用に2つのスレッドを作成Runnable
し、ゲームロジック用にもう1 つを使用して開始します。
サンプルコード:
アプリケーション開始
private GameEngine engine;
private CanvasRenderer renderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create instances of your two Runnable classes and pass that into
// the GameEngine constructor.
// Create an instance of the game engine.
engine = new GameEngine(canvasRunnable, gamelogicRunnable);
renderer = new CanvasRenderer(this, engine);
setContentView(renderer);
}
CanvasRenderer
private GameEngine engine;
// Save your instance from the GameEngine reference in your constrcutor and make
// a global initializion for your GameEngine instance.
@Override
public void surfaceCreated(SurfaceHolder holder) {
// One time setup here.
// When your view is ready, make this callback to the
// GameEngine.
engine.surfaceIsReady();
}
GameEngine
private Thread canvasThread;
private CanvasRunnable canvasRunnable;
// You should be able to figure out how to create a second thread
// where you should put your game logic. :)
// Constructor stuff like creating instances of your threads
// and passing references as you wish to those.
// Don't start the threads here.
// Remember to set references from your Runnable's into your Thread's
// instances here!
/**
* Callback. Now your renderer is ready and you
* can start your threads.
*/
public void surfaceIsReady() {
thread.setName("Canvas");
thread.start();
// Same for game logic.
}