背景
SurfaceView是游戲開發中經常使用到的View,能夠實時的更新UI界面,實現游戲邏輯。在這裡的討論中,我設定了一個GameActivity , 在這個activity的布局中,放置了一個全屏的GameSurfaceView。GameActivity雖然是游戲的主體,但游戲的邏輯和顯示都是由GameSurfaceView負責。游戲開始後,GameSurfaceView在新開的線程中運行,並即時的更新游戲界面。
當游戲邏輯結束時,需要結束掉activity,以使得activity stack順序清晰。特別是在2.2系統下,不能一次性關閉app,只能每次都關閉掉各個acticity。
實現
如何在GameSurfaceView中結束掉這個activity呢?
增加回調接口,在GameSurfaceView中實現回調!
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方法,設定好回調。
- mGameSurfaceView = (ReverseGameSurfaceView) findViewById(R.id.reverse_game_surface_view);
- mGameSurfaceView.setOnEndOfGame(this); //傳入this,設定自己為回調目標
- mGameSurfaceView.setMode(GameBasicSurfaceView.RUNNING);
如此,當GameSurfaceView結束時,就可以調用onEndOfGame方法,實現回調了!