JFrame中的游戏逻辑

时间:2014-05-04 23:34:44

标签: java swing jframe game-engine

我正在尝试根据用户输入编写具有不同状态的战舰游戏。我正在为不同类型的游戏类型,指令面板和它将具有的其他功能实现状态设计模式。我的问题是,当我为我的游戏制作JFrame时,是应该在构造期间调用逻辑,还是应该在更新窗口期间?

例如:

public class BattleshipGui extends JFrame
{
  public BattleshipGui()
  {
    initizalizeFrame();
    executeLogic();
  }
}

执行逻辑包含根据游戏事件而变化的游戏循环。

1 个答案:

答案 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中非常明显的问题。