2

Javaでゲームのプログラミングを始めました。初めて経験を積むための基本的な2Dゲームである敵とプレイヤーがいます。

今度は、「レベル エディター」に描画できるパスを敵にたどらせたいと思いました。JPanel、mouseMoveListener があり、クリックすると、Path2D が mouseMove ポイントを Path2D.Double オブジェクトに保存し始めます。

その後、次の方法を実装して、敵がこのパスをたどるようにしました。

public void forward(){
    if(!pathIterator.isDone()){
        pathIterator.currentSegment(current);
        x = current[0];
        y = current[1];
        pathIterator.next();
    }
    else {
        dead = true;
    }
}

今何が起こっているかは明らかだと思います。敵は追いかけていますが、速度はマウスを動かしたのと同じです。したがって、マウスに移動して高速にすると、敵は..あるポイントから別のポイントに「ジャンプ」します。遅くするために、そのポイントを「こっそり」。(そして私はロボットではないので、同じ速度でマウスを動かすことはできません ^^)

ロボットの話: はい、awt.Robot にマウスを動かさせることができました。しかし、背後に目に見える数学がない複雑なパスを描画する必要があるため、これも実際には不可能です。

だから、このエネミーが同じ速度でこの道を進むようにしたい。私の問題: 「修正」を実装する場所がわかりません。私には2つのアイデアがあります:

  • パスの作成に取り組むことができるかもしれません: Path2D にポイントを追加するだけでなく、移動したポイント間のポイントを計算したり、互いに近くにあるポイントを削除したりすることができます。しかし: 第一に、これを計算する方法がわかりません (これを達成するための数学ロジックはありますか?) そして第二に、これを行うと、おそらくゲーム内の敵の速度を変更することができなくなります。悪いだろう

  • 私が持っている2番目のアイデアは、(ジャンプするポイントよりも)間のポイントを計算することです。これは、実際の速度に対して、フレームごとに発生するはずです。しかし、ここでは数学の経験が十分ではありません。

それで、その方法は可能ですか?もしそうなら、誰かがこれを計算する方法を知っていますか?そうでない場合、これを達成するために他にどのような可能性がありますか?

ありがとう、下手な英語でごめんなさい!

4

1 に答える 1

5

必要なのは、敵のクラス内で敵の移動速度を定義することだけです。

次に移動するポイントが判明したら、新しい位置から現在の位置を引いて方向ベクトルを作成します。

方向ベクトルを正規化し (長さ 1)、速度と tpf (フレームあたりの時間) を掛けます。

次のポイントにジャンプする代わりに、その量だけ移動します。

(ポイントが非常に接近している場合、またはフレームレートが低い場合は、少しオーバーシュートする可能性がありますが、問題ないはずです)。

于 2014-01-21T11:40:47.257 に答える