Java Swing图形处理器

时间:2019-06-20 14:38:42

标签: java swing

我对Swing还是很陌生,我正在尝试制作一个简单的游戏,在该游戏的当前阶段,您用w-a-s-d移动一个框,并且它面对鼠标光标。在这些功能方面,我没有任何问题。 不幸的是,我在执行少量动作时出现应用程序停顿的问题。

例如,如果我四处移动方框,但光标仍然静止,则游戏开始严重卡死。但是,如果我摇动光标,则游戏运行正常。 经过研究,看来该问题与Swing的Component.repaint()有关。在实现了我对此的理解之后,口吃的问题并没有改变。

我实现它的方法是让我的抽象基础GameObject类扩展Component,游戏中显示的所有对象都是该类的后代。

在游戏类(应用程序的主类)中,运行功能负责更新游戏中的对象。

        long lastTime = System.nanoTime();
        double amountOfTicks = 60.0;
        double ns = 1000000000 / amountOfTicks;
        double delta = 0;
        long timer = System.currentTimeMillis();
        int frames = 0;

        while (running) {
            long now = System.nanoTime();
            delta += (now - lastTime) / ns;
            lastTime = now;
            while (delta >= 1) {
                tick();
                delta--;
            }
            if (running) {
                render();
            }
            frames++;

            if (System.currentTimeMillis() - timer > 1000) {
                timer += 1000;
                System.out.println("FPS: " + frames);
                frames = 0;
            }
        }
        stop();
    }

tick()render()函数调用处理程序,该处理程序处理所有对象。

    private void tick() {
        handler.tick();
    }

Handler类,并添加了重新绘制对象的内容。在调用对象的tick和render函数之后,我添加了重新绘制,但是都没有任何主要作用。

public class Handler {

    LinkedList<GameObject> objects = new LinkedList<GameObject>();

    public void tick() {
        for (int i = 0; i < objects.size(); i++) {
            GameObject object = objects.get(i);

            object.tick();
            object.repaint();
        }
    }

    public void render(Graphics g) {
        for (int i = 0; i < objects.size(); i++) {
            GameObject object = objects.get(i);

            object.render(g);
            object.repaint();
        }
    }
}

因此,尽管这些更改似乎并没有帮助解决程序中的卡顿现象,但还有其他事情-运行函数中的打印语句,打印了一个简单的字符串。 我一生都无法想像这可能会影响到什么,它当然不是永久性的解决方法,因此对这种情况的任何建议将不胜感激

0 个答案:

没有答案