大家好,我的2D游戏的移动速度各不相同。.我在台式机上制作游戏,运行正常,但随后我在笔记本电脑上玩,而播放器的移动速度则比台式机慢。

这是我当前的游戏循环:

    public void gameLoop() throws IOException {

    isRunning = true;


    while(isRunning == true) {

        Graphics2D g2d = (Graphics2D) strategy.getDrawGraphics();
        //main game loop
        //updates everything and draws
        //main componenets
        //e.g. Player
        // clear the screen
        g2d.setColor(Color.lightGray);
        g2d.fillRect(0,0,640,496);

        //drawing
        player.paint(g2d);//paint player
        map.paint(g2d);//paint each wall in wall list

        g2d.dispose();
        strategy.show();

        //update
        try { player.updateMovement(); } catch (Exception e) {};

        try { Thread.sleep(4); } catch (Exception e) {};


    }
}


这是我的player.updateMovement()方法:

    public void updateMovement() {

    if(!down || !up) {
        ny = 0;
    }

    if(!left || !right) {
        nx = 0;
    }

    if(left) {
        nx = -1;
    }

    if(right) {
        nx = 1;
    }

    if(up) {
        ny = -1;
    }

    if(down) {
        ny = 1;
    }



if ((nx != 0) || (ny != 0)) {
    x += nx;
    y += ny;
    }
}


如何解决此问题?

最佳答案

您可能有一个固定速率的绘图循环:每个迭代都应持续相同的时间,如果还剩下一些时间,请休眠该时间量。例如,如果我们将周期固定为41.6毫秒(24 fps),并且某个迭代持续20毫秒,那么您应该休眠41.6-20 = 21.6毫秒。

如果您的代码太重而无法在那时在低端PC上运行,则可以增加时间间隔,以便每台计算机都可以应对。

顺便说一句,您还可以优化代码。

您可以在gaming.stackexange.com上找到更多信息。

07-24 14:25