0

私はAndroidゲーム開発の初心者で、ドロイドが着信ボックスを飛び越えることができるという点で簡単なゲームを始めました。onTouchEvent を使用してサーフェス ビューで droid.jump() メソッドを呼び出したい (画面をタップするだけ)

Droid というクラスを作成しました。

public class Droid {


// Log Tag for Debugging
public static final String LOG_TAG = "_1Projekt";

private Bitmap bitmap; // the actual bitmap
private int x; // the X coordinate
private int y; // the Y coordinate
private boolean touched; // if droid is touched/picked up
private Speed speed; // the speed with its directions

private long mLastTime;

public Droid(Bitmap bitmap, int x, int y) {
    this.bitmap = bitmap;
    this.x = x;
    this.y = y;
    this.speed = new Speed();
}

…………

そして jump() メソッドが私の問題です。スムーズにジャンプしたいのですが、現在のシステム時間でこれを計算する方法がわかりません。私の考えでは、ドロイドは Y 位置を -TimePeriod- ごとに更新し、最初は速い速度で開始し、次に速度を 0 に下げてスムーズにジャンプする必要があるというものでした。しかし、while ループでこれを計算する方法がわかりません。私の現在のジャンプ():

public void jump() {
    Log.d(LOG_TAG, "Jumping");
    long now = System.currentTimeMillis();
    int elapsedTime = 100;
    int jump = y-30;

    while(y > jump)
    {
        if(System.currentTimeMillis() > now + elapsedTime)
        {
        now = now + elapsedTime;
        elapsedTime -=3;
        y = y-1;
        }
    }
}

ジャンプの「上」の部分だけを実装したことを知っています。回答ありがとうございます。ごきげんよう

4

1 に答える 1

0

あなたはここを見たいと思うかもしれません(3番目の投稿):

メインループの前に、

//Get the current time
timeStep = System.currentTimeMillis();

そして、あなたのことをしてください。次に、ループが最初に戻る前に、

// Hold to lock at FPS
while(System.currentTimeMillis()-timeStep < 1000/60);

60 は実行する 1 秒あたりのフレーム数です。

このメソッドを使用すると、while ループ後の時間差を取得して、1 フレームのレンダリングにかかった時間を調べることもできます。これを使用すると、フレームに依存しない速度を得るためにすべてのインクリメントを乗算できる変数を持つことができます。

たとえば、フレームを処理するのにかかったミリ秒数を 16.666 で割ると、プログラムが約 60 FPS で実行される場合、数値は 1 になります。フレーム レートが低いと、フレームのレンダリングにかかる​​ミリ秒が長くなり、その係数が大きくなります。

ただし、必ず塗り直す前に置いてください。これは、ビデオゲームのタイミングも同じです。JAVA の下の私のビデオ ゲーム ベース アプレット コード スニペットに例が示されています。

于 2012-06-26T16:40:49.620 に答える