我正在尝试根据用户输入编写具有不同状态的战舰游戏。我正在为不同类型的游戏类型,指令面板和它将具有的其他功能实现状态设计模式。我的问题是,当我为我的游戏制作JFrame时,是应该在构造期间调用逻辑,还是应该在更新窗口期间?
例如:
public class BattleshipGui extends JFrame
{
public BattleshipGui()
{
initizalizeFrame();
executeLogic();
}
}
执行逻辑包含根据游戏事件而变化的游戏循环。
答案 0 :(得分:2)
GUI应该只负责渲染。所有实际的游戏逻辑都应该在你的主线程上处理,而EDT正在为你画画(重新将事件发布到EDT)。对于" invokingGameLogic",首先应该在构造函数中完成(考虑到该方法包含更新游戏的循环)。您应该使用initFrame然后启动专用于更新/渲染游戏的循环。在更新和渲染之间创建一个接口;具有呈现代码和更新代码都可以访问的变量。这样,渲染代码呈现当前状态,而更新代码则更改它。
class Game extends Canvas {
//the items used between render and update
Player player;
Enemy player;
//render values
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.BLUE);
g.fillRect(player.x, player.y, 50, 50);
g.setColor(Color.RED);
g.fillRect(enemy.x, enemy.y, 50, 50);
}
//affect values
public void update() {
player.x++;
}
}
让您的游戏逻辑远离渲染。它使编程变得更容易,因为您将能够轻松找到处理图形的代码,以及哪些代码处理移动的玩家以及什么不是。
如果您使用的是Component#paint(Graphics)
,那么您真的希望将游戏逻辑从渲染中分离出来。 paint方法中的代码执行Event Dispatch Thread,这意味着更新问题将导致GUI中非常明显的问题。