ビデオ: LIBGDX para Android - Tutorial 19 - Detectar Colisiones - How to make games Android 2025
スプライトが移動を開始すると、常にスプライトが画面の境界を離れる可能性があります。通常、HTML5ゲーム開発者は、ラップ、バウンス、ストップ、ダイ、または継続の5つの方法のいずれかで応答します。 simpleGameライブラリには境界チェックルーチンがあり、これらのデフォルト動作を使用するかどうかを指定できます。スプライトのboundActionプロパティは、使用するアクションを示します。境界チェッカを使用すると、次のことができます。
<! - 1 - >-
罫線を決定します。
枠線はキャンバスの幅によって決まります。
-
ユーザーが国境を越えていないかどうかを確認します。
次に、スプライトがオフライン、オフライン、オフトップ、およびオフボトムのいずれかの境界線から外れているかどうかを示すブール値を含む別の一連の変数が作成されました。これらの方法のいずれかでスプライトが画面外に出ているかどうかを判断するには、基本的なifステートメントを使用します。
<! - 2 - > -
境界動作を決定します。
単純なif文を使用して、スプライトに現在設定されている境界アクションを判別します。
-
boundActionがWRAPの場合:
xまたはy変数を反対側に変更しますが、dxとdyの値はそのままにしておきます。
-
boundActionがBOUNCEの場合:
スプライトが上または下にバウンスした場合はdyを反転し、スプライトが左または右にバウンスした場合はdxを反転します。 xまたはyを直接変更する必要はありません。
-
boundAction が STOPの場合: 終了した境界にかかわらず、速度をゼロに設定するだけです。
boundAction
-
が の場合DIE: 速度をゼロに設定し、スプライトのhide()メソッドを呼び出します。これにより、スプライトが消え、衝突計算で考慮されなくなります。 他のboundActionはCONTINUEとみなされます。
スプライトは表示されなくても動き続けるので、ここでは何もする必要はありません。これが目的の効果である場合は、スプライトがどこにあるかをユーザに何らかの方法で示すか、またはスプライトが戻るための何らかの方法を提供する必要があります。
-
衝突チェックルーチンのコードの一部です:
offRight = false; offLeft = false; offTop = false; offBottom = false; if(this。x> rightBorder){offRight = true;} if(this。xBorderBorder){offBottom = true;} if(this.y <0){offTop = true;} if(this。boundAction == WRAP) {if(offRight){this。 x = leftBorder;} // if if(offBottom){this。 y = topBorder;} // if if if(offLeft){this。 x = rightBorder;} // if if(offTop){this。 (if。this。boundAction == BOUNCE){if(offTop || offBottom){this。dy * = -1;この。 calcSpeedAngle();この。 imgAngle = this。 moveAngle;} if(offLeft || offRight){これです。 dx * = -1;この。 calcSpeedAngle();この。 imgAngle = this。 {if(this。boundAction == STOP){if(offLeft || offRight || offTop || offBottom){これです。 if(this。boundAction == DIE){if(offLeft || offRight || offTop || offBottom){this。隠す();この。 setgoundAction()メソッドを使用して、スプライトの境界アクションを変更する場合は、setGetAction()メソッドを使用します。
いくつかの状況では、異なる動作が必要な場合があることに注意してください。たとえば、辺を折り返して上または下に停止したい場合があります。より具体的な動作が必要な場合は、スプライトの新しいcheckBounds()メソッドを作成してください。ただし、新しいcheckBounds()がsimpleGameに組み込まれているcheckBounds()を完全に上書きするため、すべての境界をチェックする必要があります。
