背景
SurfaceView是遊戲開發中經常使用到的View,能夠實時的更新UI界面,實現遊戲邏輯。在這裡的討論中,我設定瞭一個GameActivity , 在這個activity的佈局中,放置瞭一個全屏的GameSurfaceView。GameActivity雖然是遊戲的主體,但遊戲的邏輯和顯示都是由GameSurfaceView負責。遊戲開始後,GameSurfaceView在新開的線程中運行,並即時的更新遊戲界面。
當遊戲邏輯結束時,需要結束掉activity,以使得activity stack順序清晰。特別是在2.2系統下,不能一次性關閉app,隻能每次都關閉掉各個acticity。
實現
如何在GameSurfaceView中結束掉這個activity呢?
增加回調接口,在GameSurfaceView中實現回調!
關於回調的介紹: callback。
1,設定一個回調接口
public interface OnEndOfGameInterface {
public void onEndOfGame();
}
在GameActivity中實現這個接口。
public class GameActivity extends Activity implements OnEndOfGameInterface {
//….
@Override
public void onEndOfGame() {
this.finish();
}
}
在GameSurfaceView中定義回調類型的成員。 並定義一個public method 用來設置回調成員為GameActivity。
protected OnEndOfGameInterface mOnEndOfGame ; //callback interface
public void setOnEndOfGame(OnEndOfGameInterface xOnEndOfGame){
mOnEndOfGame = xOnEndOfGame;
}
GameActivity中,開啟GameSurfaceView的同時,必須調用setOnEndOfGame方法,設定好回調。
view plain
mGameSurfaceView = (ReverseGameSurfaceView) findViewById(R.id.reverse_game_surface_view);
mGameSurfaceView.setOnEndOfGame(this); //傳入this,設定自己為回調目標
mGameSurfaceView.setMode(GameBasicSurfaceView.RUNNING);
如此,當GameSurfaceView結束時,就可以調用onEndOfGame方法,實現回調瞭!
摘自:BIAOBIAOqi的小巢