因此,我正在開發一款適用於Android的新基本2D遊戲,並且正在設置我通常使用SurfaceView進行遊戲線程的實現。打字時,我意識到,雖然這似乎工作,但我真的想知道是否有更好的方法來實現相同的結果。這裏是什麼,我現在(我的冗長道歉,我試圖壓縮儘可能多地)做的基本知識:Android遊戲線程生命週期實現
GameActivity類
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.game);
this.mGameView = (GameView)this.findViewById(R.id.gameview);
}
XML佈局
<?xml version="1.0" encoding="utf-8" ?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<com.package.name.GameView
android:id="@+id/gameview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:focusableInTouchMode="true" />
</merge>
GameView
@Override
public void surfaceCreated(final SurfaceHolder holder) { }
@Override
public void surfaceChanged(final SurfaceHolder holder, final int format,
final int width, final int height)
{
this.mGameThread = new GameThread(this.getContext(), holder,
width, height);
this.mGameThread.start(); // starts the game
}
@Override
public void surfaceDestroyed(final SurfaceHolder holder)
{
// flips volatile flag stopping execution
// then calls .join()
this.mGameThread.release();
}
GameThread類
@Override
public void run()
{
// load game state
while (this.mRunFlag) // volatile loop flag
{
// game loop
}
// save game state
}
正如你所看到的,基本上我依靠SurfaceHolder的回調來管理遊戲。這種方法在取向改變等情況下效果很好,但如果不問,我可能永遠不知道這是否能以更好的方式實現,如果存在的話,我會急於學習。所以這就是我問的原因!有什麼想法嗎?
(我很好奇的原因是因爲我幾乎完全忽略了活動生命週期事件,並認爲這可能是一個問題...)