1

好的,我想首先说我知道我实际上并没有移动相机,但这样更容易解释。

我的问题是我试图在自上而下的 2d rpg 中使用我的角色移动相机,但我找不到正确的方法。我知道 glTranslate() 但是我只能使用速度而不是 x 和 y 坐标。我不确定如何移动相机以记住增量。我什至不知道 glTranslate() 是否是我应该使用的方法。

如果我没有任何意义(这很可能),这是我的一些代码。

我的测试while循环:

while(!Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)&&!Display.isCloseRequested())
    {
        glClear(GL11.GL_COLOR_BUFFER_BIT);

        delta=getDelta();
        update(delta);
        glTranslatef(speedx, speedy, 0);

        level1.checkCurrent(x, y);
        level1.draw();
        Display.update();
        Display.sync(60);
    }

这是我设置速度的地方:

    if(Keyboard.isKeyDown(Keyboard.KEY_DOWN))
    {
        y+=0.5*delta;
        screenY+=0.5*delta;
        speedy=(int) (-0.5*delta);
        direction=2;
    }
    else if(Keyboard.isKeyDown(Keyboard.KEY_UP))
    {
        y-=0.5*delta;
        screenY-=0.5*delta;
        speedy=(int) (0.5*delta);
        direction=8;
    }
    else
        speedy=0;
4

1 回答 1

1

现在,您将 OpenGL 视为场景图。然而,OpenGL 只是为了在屏幕上绘制东西。无论您做什么,您都应该始终以某种方式考虑您的问题,就好像所有其他基础设施都不存在一样。

你想加速一个物体?好吧,那么您需要随着时间增加一些速度变量,并且该速度变量乘以时间会添加到位置。本质上是牛顿运动定律:

a = dv/dt => v = a*t + v_0
v = dr/dt => r = v*t + r_0 = a*t² + v_0*t + r_0

您对每个对象进行评估。然后在绘制动画时,使用状态相应地放置对象几何体。

于 2012-11-05T00:05:12.043 回答