私はJ2MEで作業しています。ゲームループで次のことを行っています:
public void run() {
Graphics g = this.getGraphics();
while (running) {
long diff = System.currentTimeMillis() - lastLoop;
lastLoop = System.currentTimeMillis();
input();
this.level.doLogic();
render(g, diff);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
stop(e);
}
}
}
つまり、これは単なる基本的なゲームループです。doLogic()
関数はシーン内のキャラクターのすべてのロジック関数をrender(g, diff)
呼び出し、シーンanimateChar
上のすべてのキャラクターの関数を呼び出します。これに続いてanimChar
、Character クラスの関数が画面内のすべてを次のように設定します。
protected void animChar(long diff) {
this.checkGravity();
this.move((int) ((diff * this.dx) / 1000), (int) ((diff * this.dy) / 1000));
if (this.acumFrame > this.framerate) {
this.nextFrame();
this.acumFrame = 0;
} else {
this.acumFrame += diff;
}
}
これにより、マシンがサイクルからサイクルへと移動するのにかかる時間に従って、すべてが移動する必要があることが保証されます (これは電話であって、ゲーム機ではないことを思い出してください)。この動作を実現する最も効率的な方法ではないことは確かなので、コメントで私のプログラミング スキルに対する批判を完全に受け入れますが、ここで私の問題: キャラクターをジャンプさせるとき、私がすることは、彼のdyを負の値、たとえば -200 に設定し、ブール値のジャンプを true に設定すると、キャラクターが上昇します。次に、この関数を呼び出しcheckGravity()
て、上昇するすべてのものを下降させる必要があることをcheckGravity
確認し、キャラクターが存在するかどうかもチェックしますプラットフォームを超えているので、時間を節約するために少し省略します。
public void checkGravity() {
if (this.jumping) {
this.jumpSpeed += 10;
if (this.jumpSpeed > 0) {
this.jumping = false;
this.falling = true;
}
this.dy = this.jumpSpeed;
}
if (this.falling) {
this.jumpSpeed += 10;
if (this.jumpSpeed > 200) this.jumpSpeed = 200;
this.dy = this.jumpSpeed;
if (this.collidesWithPlatform()) {
this.falling = false;
this.standing = true;
this.jumping = false;
this.jumpSpeed = 0;
this.dy = this.jumpSpeed;
}
}
}
したがって、問題は、この関数がdiffに関係なくdyを更新し、キャラクターが遅いマシンでスーパーマンのように飛ぶようにすることです。キャラクターがジャンプしているときに速度が低下するようにdiff係数を実装する方法がわかりませんゲーム速度に比例する方法。誰でもこの問題を解決するのを手伝ってもらえますか? または、J2ME で正しい方法で 2D ジャンプを作成する方法を教えてください。