0

オブジェクトをイーズインおよびイーズアウトさせようとしています。

しかし、これをレンダリングするとうまくいきますが、常に他のオブジェクトとは正反対の動作をする別のオブジェクトが得られます。

そのため、オブジェクトが上に向かっているとき、「ゴースト」オブジェクトは真逆で下に向かっています。かなり奇妙な画面の引き裂き効果が得られます。vsync をオンにしようとしましたが、それがさらに悪化したようです。オブジェクトは 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で見つけることができます。

キーが別の場所で離されると、フレーム var がリセットされます。スプライトをヘリコプターのように動作させようとしています。ヘリコプターのようにする方法を知っている場合は、知識を共有してください!

4

1 に答える 1

0

私は問題を発見したようです。更新ごとにデルタで 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 に答える