2016-09-18 3 views
0

私は2Dプラットフォームを作成しようとしています。私はジャンプを試みようとしています。しかし、私は、プレイヤーをプラットフォームに落とさせる方法を忘れています。プレイヤーをプラットフォーム上に落とす

私はプラットフォームと呼ばれる新しいクラスを作成し、ゲーム内のすべてのプラットフォームのすべての座標のArrayListを作成すると考えていました。

私はwhileループを作成します。プレーヤーがジャンプしたとき、彼が落ちているときは、プラットフォームに立っていなければ落ち続けます。

while(// This is where you check if the player's y coordinate is above all of the platforms in the game, so WHILE you are above all of the platforms, continue falling.){ 

     playery--; 
     repaint(); 
     // Some kind of wait here 
} 

私はここに正しいアプローチを取っています:のような

何か? 私はそれを複雑にしていますか?これを達成する簡単な方法はありますか?

+0

あなたが考えていることは、間違いなくそれを検討することです。他にも多くのものがあります。 – nhouser9

+0

@ nhouser9この質問のメインポストが更新されましたが、私は最も簡単なアプローチを採用していますか?それとも、私はこれを複雑にしています。 – joey942

+0

プレイヤーがプラットフォームから降りたときに何が起こるか(つまりジャンプしないか) 通常のゲームループの一部である必要があります(ジャンプしてもしなくても)。すべての更新サイクルの後、入力を処理し、新しい位置を計算し、プレーヤーを新しい位置に更新し、再描画します。プレーヤーが床に座っている場合、計算の一部に含める必要があります。そうすることは、あなたがチェックしたいアルゴリズムの種類に依存します。それは、配列やボックスの衝突などを経由している可能性があります –

答えて

1

通常、あなたのplayerオブジェクトにはupdate()メソッドとrender()メソッドがあります。重力を簡単にするために、すべての更新コールでプレイヤーの位置を更新できます。 posY + = 5。高度な重力の場合、更新ごとにyの位置を更新するy速度があります。このy速度は滑らかな動きのために変化する。

ゲーム内のすべてのエンティティをいくつかのコレクションに保持するコントローラクラスが必要です。私のゲームでは、このクラスはEntityManagerと呼ばれ、LinkedLists内のすべてのEntityを保持します。異なるエンティティタイプのコレクションをいくつか用意することをお勧めします。この場合、あなたのプラットフォームを作る正方形ブロックを表すBlockEntitiesを持つことができます。

今、最も重要な概念です。すべてのエンティティには、Rectangleオブジェクトをヒットボックスとして返すメソッドがあります。ここ iが作らゲームの例である:

public Rectangle getBounds() { 
     return new Rectangle(x, y, width, height); 
    } 

X、Y、幅及び高さは、エンティティの特性です。

また、プレーヤーの下部にあるヒットボックスが必要です。例えば、プレイヤーのサイズは32×32ピクセルであるかどう:

public Rectangle getBottomBounds() { 
    return new Rectangle(x, y+30, width, 2); 
} 

は今衝突制御が来る:あなたはこのようなフィールドを必要とするプレーヤーで :

protected LinkedList<Block> blocks = null; 

プレーヤーではこのメソッドを実装します。

public void checkBottomCollision() { 
    blocks = game.getEntityManager().getBlocks(); 
    for (int i = 0; i < blocks.size(); i++) { 
     Block tempBlock = blocks.get(i); 
      if(this.getBottomBounds().intersects(tempBlock.getBounds())){ 
       this.y = tempBlock.getY() + this.height; 
      } 
     } 
    } 
} 

game.getEntityManagerは()私のゲーム内のすべてのエンティティを保持しているControllerClassを取得します。メソッドgetBlocks()は、すべてのブロックを含むLinkedListを返します。 ブロックごとにプレーヤーの衝突がないかどうかをチェックします。ボトムヒットボックスが衝突すると、プレイヤーがブロック上に立つように位置を更新します。 y-位置を更新した後、このメソッドをupdate-methodで呼び出します。

お楽しみください;-)

+0

情報のお返事ありがとう!間違いなくこれをやろう! :) – joey942

関連する問題