-2

私は、プレイヤーが波を発射するゲームを作成しています (高調波ではなく津波のような)。私は、距離を移動してそれが消えるペースのシステムを持っています。また、エンティティからも跳ね返ります (あまりよくないかもしれませんが)。完全な変更ではなく、これをより現実的で分離可能にする方法があるかどうかを知りたい. これが曲線です(私はslick2dを使用しています)。

one = new Vector2f((float)referenceX, (float) referenceY);
two = new Vector2f((float) (referenceX + ((width * amplitude) / Math.PI)), (float)(referenceY - (height * amplitude)));
three = new Vector2f((float) ((referenceX + width) - ((width * amplitude) / Math.PI)), (float)(referenceY - (height * amplitude)));
four = new Vector2f((float)(referenceX + width),(float)(referenceY));`
new Curve(one, two, three, four);

基準点を移動し、幅を広げて移動します。

ここに衝突コードがあります

if ((s.player.getBounds().getWidth() / 2) + s.player.getBounds().getX() > 
                (e.getBounds().getX() + e.getBounds().getWidth()) )
{
    this.referenceX = e.getBounds().getX() + (e.getBounds().getWidth() / 4);
    this.referenceY = e.getBounds().getY();
}
else if ((s.player.getBounds().getWidth() / 2) + s.player.getBounds().getX() <
                e.getBounds().getX())
{
    this.referenceX = e.getBounds().getX();
    this.referenceY = e.getBounds().getY();
}
else
{
    this.referenceX = s.player.getBounds().getX() + 4;
    this.referenceY = e.getBounds().getY();
}

波がよりリアルに見えるようにするには、何をどのように修正すればよいですか?

4

1 に答える 1

2

コードを見ると、波がプレーヤーから離れて正しく広がっているようには見えず、おそらくうまく跳ね返っていないのではないかと推測しています。波が、波の経路に垂直な直線の壁のような最も単純なエンティティで跳ね返ったとしても、曲線を使用して現実的な方法で波を表現することは困難であることがわかります。レイキャスティングの方法で波をモデル化する方がはるかに簡単であることがわかると思います。

プレイヤーが波を撃つ代わりに、一定数のパーティクルを撃っていると考えてください。

  • 波は粒子の集まりです(大きな数である必要はありません)
  • プレーヤーが 45 度で、波の「幅」が 10 度の場合、その波はプレーヤーから 40、41、42、43、44、45、... 50 の角度で 11 ポイント離れていると考えてください。波が長く続くか、遠くに移動するほど、スムーズにモデル化するために必要なポイントが多くなります。
  • 各ポイントは、角度またはパスと、移動した距離を持つオブジェクトです
  • 時間の増分ごとに、そのパスと距離を使用してポイントの新しい位置を計算します (先に進むにつれて速度が低下するか、跳ね返るたびに速度が低下するか、特定の距離の後に死ぬか、「波を吸収する」壁をモデル化することさえあります)。
  • 各ポイント オブジェクトが衝突を処理し、それに応じて動作するようにします。パーティクルがオブジェクトに衝突すると、その新しい角度またはパスが計算されます。
  • 波を描く時が来たら、順番に粒子点を通る曲線または線分を走らせます。
于 2013-05-28T15:41:39.663 に答える