0

我正在尝试使对象轻松进出。

但是当我渲染它时效果很好,但我总是得到另一个对象的行为与另一个对象直接相反。

因此,当对象向上时,“幽灵”对象将直接对面向下。它给出了一个相当奇怪的屏幕撕裂效果。我试过打开垂直同步,但这似乎让情况变得更糟。该对象是一个 slick2d 矩形。它也有完全消失几秒钟甚至永久变成一条直线的习惯,而无需我每次改变它的尺寸。这是更新代码。

   @Override
public void update(GameContainer gc, StateBasedGame game, int delta) throws SlickException {
    // TODO Auto-generated method stub

    Input i=gc.getInput();
    d=2000/delta;
    if(i.isKeyDown(Input.KEY_DOWN)){
        if(frames<d)
        frames++;

        if(frames==1)b=hele.getY();
        hele.setY(Quad.easeInOut(frames, b, 720-b-50, d));//the 50 is the size of the sprite
        //c+=10;
    }
    else if(i.isKeyDown(Input.KEY_UP)){
        if(frames<d)
        frames++;

        if(frames==1)b=hele.getY();
        hele.setY(Quad.easeInOut(frames, b, -b, d));

    }



}

可以在 github 上找到缓入公式

一旦密钥在其他地方释放,我就会重置帧变量。我试图让精灵表现得像直升机。如果您有任何想法如何使它更像直升机,请分享您的知识!

4

1 回答 1

0

我似乎发现了问题,每次更新都用 delta 更新 d 会导致屏幕撕裂!保持不变将解决问题。

我没有使用帧计数,而是使用了增量计时器......

if(elapsedtime<d)
                elapsedtime+=delta;

使用增量跟踪时间,对于我使用帧的每个地方,我都替换为经过的时间。

if(frames==1){b=getCBox().getY();}
            getCBox().setY(Bounce.easeOut(elapsedtime, b, 720-b-getCBox().getHeight(), d));

但是,我仍然使用帧数来识别增量的第一次更新并不总是可靠的。

完整的源代码可以在 git 上找到:https ://bitbucket.org/BallisticBlaze/helirush-game/

希望这对任何人都有帮助。

于 2017-01-05T15:28:16.193 回答