でジャンプの数学は、私は私のgameloopは、次の操作を行ってあります私はJ2MEで働いていた2Dゲーム
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);
}
}
}
だから、それだけで基本的なgameloopだ、doLogic()
機能は、すべての論理関数を求めてシーン内の文字とrender(g, diff)
がシーンのすべての文字のanimateChar
関数を呼び出すの、この次、CharacterクラスでanimChar
機能は、このように画面内のすべてを設定しています
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に設定して、ブール値をにジャンプさせると、文字が上がります。次に、この関数が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;
}
}
}
、問題は、この機能はDYのを更新していること、ですにかかわらずdiffに関係なく、スローマシンではスーパーマンのように飛んでいますが、diffの要因を実装する方法はわかりません。そのため、キャラクターがジャンプしているときに、スピードがゲーム速度。誰も私がこの問題を解決する手助けはできますか?または、私にどのように指針を与えるJ2MEの2Dジャンプを正しい方法で行う。
これは長い質問です。本質を引き出すことができます。 –
サイドの問題として、あなたは本当にJ2MEゲームで100ティック/秒をしたいですか?私がsbが言及したと思うように、あなたは本当に毎回一定の持続時間ではなく、次の所望の起床ポイントまで眠るべきです。 –