Java的。 " Game Loop"理论援助

时间:2014-04-28 21:03:14

标签: java game-engine

我正在申请,我需要一些帮助。

在flash中,gameLoops既可以使用enterFrame,也可以使用计时器。

我是Java的新手,所以请原谅我的傲慢。从研究中我看到人们使用计时器。

现在我有一个基于磁贴的游戏,如果用户点击一个网格(它是30 * 21),玩家将转到该网格。

以下是我提出的内容

    for(int i = 0; i<30; i++)
    {
            for(int j = 0; j<21; j++)
            {
                if(e.getSource()==JbGrid[i][j])
                {
                   MOUSE_X = j;
                   MOUSE_Y = i;
                   System.out.println("Mouse X: "+MOUSE_X+" Mouse Y: "+MOUSE_Y);
                   moveToSquare();

                }

            }
    }

}

public void moveToSquare()
{

    if( BPOS_X < MOUSE_X )
    {
        BPOS_X +=2;
    }

    if( BPOS_X > MOUSE_X )
    {
        BPOS_X -=2;
    }


}

现在问题是游戏没有实际显示红色块移向MOUSE_X位置,这是因为页面没有刷新。

有没有办法在我的代码中实现gameLoop。只是大多数人一开始就实现它,在开始我的项目之前我从未知道“gameLoops”。

有人可以指出我正确的方向吗

if(player clicks square)
activate loop
move player to Mouse_X

谢谢。

You can see that it doesn't leave a trail of red blocks behind

2 个答案:

答案 0 :(得分:1)

看起来你正在使用Swing,如果你的问题是如何使用Swing的基础知识(不使用BufferStrategy的应用程序,但是不同的Swing组件的组合)从应用程序中获取游戏循环,那么你大概需要以下内容:

  • 表示游戏状态的对象(当然可以进一步抽象为更多对象)
  • 一个自定义JComponent,它引用了该对象,在重绘期间以某种方式绘制对象(可以进一步抽象为更多JComponents,帮助绘制状态,自定义与否)
  • 一个java.util.Timer,它也有对该对象的引用,它根据自上次更新以来经过的时间更新游戏,并最终调用repaint

您创建的自定义JComponent可以在各种按钮或其他内容(如鼠标单击)上拥有侦听器,您可以在其中使用对用于绘制的游戏状态对象的相同引用来更新游戏的状态,具体取决于UI动作。

确保您的代码也是线程安全的,因为在EDT或其中一个Swing侦听器上执行的重绘可能在您使用Timer对象更新状态的同时发生。

如果您使用BufferStrategy在线搜索Java中游戏循环的使用示例,您将找到更多传统的游戏循环示例。

答案 1 :(得分:0)

http://www.java-gaming.org/index.php?topic=24220.0

如果您不理解任何内容,请阅读此内容并询问更多内容