通过网络制作游戏。 paintcomponent()/ repaint()循环可以在客户端上使用吗?

时间:2017-01-11 22:51:56

标签: java game-loop

所以我正在制作一个连接到服务器的游戏,其中x,y等的所有计算都将使用经过的时间来完成。在显示图形的客户端上,我正在使用paintcomponent()和repaint()来绘制图形。可以使用这种方法吗?因为在不同的计算机上,角色移动的速度将根据计算机运行paintcomponent()的速度而有所不同。假设我在运行游戏时得到200fps ..这是否意味着paintcomponent被称为每秒200次?对于速度较慢的计算机,如果60fps,则调用paintcomponent方法,即每秒60次? (我正在使用getframerate方法来查找framrate)

目标:我的目标是让游戏在所有机器上运行相同,而不是根据计算机的速度而变化

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.clearRect(0, 0, WIDTH, HEIGHT);
        if (gameState == 0) { // main menu
            menuScreen.draw(g); // draw main menu screen
        } else if (gameState == 1) { // instructions
            instrScreen.draw(g);
        } else if (gameState == 2) { // options
            optionsScreen.draw(g); // draw options screen
        } else if (gameState == 3) { // game
            man.draw(g); // test
            if (upKey) {
                man.changeDirection("UP");
                man.move();
                //outputToServer("W");
            }
            if (downKey) {
                man.changeDirection("DOWN");
                man.move();
                //outputToServer("S");
            }
            if (leftKey) {
                man.changeDirection("LEFT");
                man.move();
                //outputToServer("A");
            }
            if (rightKey) {
                man.changeDirection("RIGHT");
                man.move();
                //outputToServer("D");
            }
        }

        g.setColor(Color.BLACK);
        g.drawString(getFrameRate(), 10, 15);
        repaint();
    }

    private String getFrameRate() {
        long currentTime = System.currentTimeMillis();
        deltaTime += currentTime - lastTimeCheck;
        lastTimeCheck = currentTime;
        frameCount++;
        if (deltaTime >= 1000) {
            frameRate = frameCount + "fps";
            frameCount = 0;
            deltaTime = 0;
        }
        return frameRate;
    }

0 个答案:

没有答案