我在这方面读了其他问题,但我觉得我的架构有点不同,所以我发帖。
我有一个MainActivity
和多个视图的游戏。基本上,有一个LinearLayout
填充MainActivity
,并且根据状态在布局上设置不同的视图。例如,menuState
(menuView),gameState
(gameView),gameOverState
(gameOverView)。
在我的BattleView
(extends SurfaceView
)中,我试图实现游戏循环。但是,由于BattleView
返回null,我的Callback
无法实现getHolder()
。
我将如何继续解决这个问题?
public class MainActivity extends AppCompatActivity {
GameScreen gs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.init();
}
private void init(){
this.gs = new GameScreen(this);
this.hideSystemUI(this.gs);
setContentView(this.gs);
}
然后我的GameScreen class
包含BattleView class
,在适当时调用。
public GameScreen(Context context){
super(context);
this.init();
}
private void init(){
this.ms = new MapScreen(this.getContext(), this);
((MainActivity)this.getContext()).hideSystemUI(this.ms);
this.addView(this.ms);
}
private void newMapScreen(){
this.ms = new MapScreen(this.getContext(), this);
}
public void addBattleScreen(BattleScreen bs){
//this.bs = new BattleScreen(this.getContext(), ms);
this.removeView(this.ms);
this.bs = bs;
((MainActivity)this.getContext()).hideSystemUI(this.bs);
this.addView(this.bs);
}
嗯.. BattleScreen
包含BattleView class
并在那里初始化。然后,BattleView
类
public BattleView(Context context, int monsterNumber, Hero hero){
super(context);
this.gameLoopInit();
this.setBackgroundImage();
}//end
private void gameLoopInit(){
holder = getHolder(); <------------- ERROR (null)
System.out.println(holder);
holder.addCallback(this);
}