我有一个游戏有两种模式:定时限制和股票限制(有点像粉碎兄弟)。在我的游戏循环中,调用一个名为renderGame()的方法,它更新移动对象的显示坐标,然后调用repaint()。
@Override
public synchronized void paint(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//Background Image
g2d.drawImage( displayBackground, 0, 0, null );
//Stage Image
g2d.drawImage( displayMap, 0, 0, null );
//Players Images
for( Player p: players ){
if( p.getPlayerNumber() == 1 )
g2d.drawImage( displayMario, p1XDisplayCoord, p1YDisplayCoord, null);
else
g2d.drawImage( displayLuigi, p2XDisplayCoord, p2YDisplayCoord, null);
}
//Not implemented yet
drawHUD( g2d );
g2d.dispose();
}
我的问题是:我怎样才能使drawHUD()方法根据匹配中的当前进程绘制不同的东西,而不必在每次调用renderGame()时测试定义该状态的条件我的游戏循环?有点像铁路开关。
例如:它应该在启动期间绘制一个'ready-set-go'序列,在游戏过程中绘制玩家统计数据,并且一旦比赛结束它应该指示一个匹配赢家。它也应该依赖于游戏类型。例如:显示一个在股票匹配期间递增但在定时匹配期间递减的计时器。
答案 0 :(得分:1)
重大问题:
super.paintComponent
- 这是一件非常危险的事情。而是paintComponent并调用相同的super方法。回复:
我的问题是:我怎样才能使drawHUD()方法根据匹配中的当前进程绘制不同的东西,而不必在每次调用renderGame()时测试定义该状态的条件我的游戏循环?有点像铁路开关。
大多数状态检查不应该很昂贵,但如果有的话,你可以使用某种类型的布尔开关,如果状态发生变化则设置它,绘制方法可以测试然后重置。