通常、あなたの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で呼び出します。
お楽しみください;-)
あなたが考えていることは、間違いなくそれを検討することです。他にも多くのものがあります。 – nhouser9
@ nhouser9この質問のメインポストが更新されましたが、私は最も簡単なアプローチを採用していますか?それとも、私はこれを複雑にしています。 – joey942
プレイヤーがプラットフォームから降りたときに何が起こるか(つまりジャンプしないか) 通常のゲームループの一部である必要があります(ジャンプしてもしなくても)。すべての更新サイクルの後、入力を処理し、新しい位置を計算し、プレーヤーを新しい位置に更新し、再描画します。プレーヤーが床に座っている場合、計算の一部に含める必要があります。そうすることは、あなたがチェックしたいアルゴリズムの種類に依存します。それは、配列やボックスの衝突などを経由している可能性があります –