加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在java中单独的逻辑和GUI

发布时间:2020-12-15 00:21:45 所属栏目:Java 来源:网络整理
导读:我正在 Java中实现一个游戏,使用下面显示的类来控制游戏逻辑.解释我的问题时,我会很清楚. GamePanel 我使用这个类来启动一个线程游戏循环(只有游戏循环) public void run() {init(); //initialize gamePanel components// game loopwhile (running) { start
我正在 Java中实现一个游戏,使用下面显示的类来控制游戏逻辑.解释我的问题时,我会很清楚.

> GamePanel

>我使用这个类来启动一个线程游戏循环(只有游戏循环)

public void run() {
init(); //initialize gamePanel components
// game loop
while (running) {
      start = System.nanoTime();
      gameManager.update();
      KeyInput.update();
      MouseInput.update();
      gameManager.draw(graphic);
      Graphics g2 = getGraphics();
      g2.drawImage(image,null);
      g2.dispose();

      elapsed = System.nanoTime() - start;
      wait = targetTime - elapsed / 1000000;
      if (wait < 0)
    wait = 5;
     try {
         Thread.sleep(wait);
     } catch (Exception e) {
     e.printStackTrace();
   }

}

> GameManager

>我把这个类控制在游戏的每个方面(更新,图形)

private void loadState(int state) {

if (state == States.MENU.getValue())
gameState = new Menu(this);
else if (state == States.GAME.getValue())
gameState = new Game(this);
else if (state == States.PATHSELECT.getValue())
gameState = new SelectPath(this);
}
public void update() {
if (gameState != null)
gameState.update();
}

public void draw(java.awt.Graphics2D graphic) {
 if (gameState != null)
gameState.draw(graphic);
 else {
JOptionPane.showMessageDialog(null,JOptionPane.ERROR_MESSAGE);
     }
}

>游戏

> GameState是一个抽象类,它接收作为构造函数参数的GameManager实例,并且它在每个GameState(Menu,Game,MultiPlayer等)中实现了抽象方法.
>这个类有这些抽象方法:

> controller() – >验证状态逻辑
> update() – >在currentState是MultyPlayer的情况下,此方法调用类Player的更新方法等…
> draw(Graphics g) – >绘制来显示当前状态的对象

我想到了一个实现类单个实现每个状态的所有draw()
但是将它们全部插入到一个类中是非常讨厌的.

例:

而不是调用gameState.draw(图形);我调用Render.getRenderInstance().draw(graphic,gameState);
这个解决方案有效,但我不喜欢.

那么如何将draw方法和逻辑的其余部分分开呢?

一些忠告?谢谢.

解决方法

通常的做法是将游戏分为两部分:

>逻辑,在你的情况下看起来可以做好
>场景,画的东西

这里伪码是我如何做的:

the main loop:
  gamestate.update()
  scene.render();

在现场你应该拥有所有的图形操作.您应该能够使用类似于此的调用将新图形添加到场景中:

scene.addObject(SomeGraphic graphic);

所以现场将渲染该图形每个主循环迭代.

为了实现这一点,您应该在Scene类中保留一个列表或另一个集合,并将每个对象都刻录在一起.所以实际的scene.render()会像这样:

public void render() {
  for(SomeGraphic graphic : objects) {
    graphic.draw()
  }
}

您将能够从游戏逻辑控制场景中的内容 – 您可以添加和删除对象等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读