我正在尝试根据用户输入编写具有不同状态的战舰游戏。我正在为不同类型的游戏类型、说明面板和它将具有的其他功能实现状态设计模式。我的问题是,当我为游戏制作 JFrame 时,应该在构建期间调用逻辑,还是应该在窗口更新期间调用逻辑?
例如:
public class BattleshipGui extends JFrame
{
public BattleshipGui()
{
initizalizeFrame();
executeLogic();
}
}
执行逻辑包含根据游戏事件而变化的游戏循环。
最佳答案
GUI 应该只负责渲染。所有实际的游戏逻辑都应该在主线程上处理,而 EDT 正在为您绘制(重绘将事件发送到 EDT)。至于“invokingGameLogic”,这首先不应该在构造函数中完成(考虑到该方法包含更新游戏的循环)。您应该 initFrame 然后启动专门用于更新/渲染游戏的循环。创建更新和渲染之间的接口(interface);具有渲染代码和更新代码都可以访问的变量。这样,您的渲染代码就会渲染当前状态,而更新代码会更改它。
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 方法中的代码在事件调度线程中执行,这意味着更新问题将导致 GUI 中出现非常明显的问题。
关于java - JFrame 中的游戏逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462784/