0

すべて「長方形」のオブジェクトの配列があります。オブジェクトである円もあります。私が重力に使用する方程式は次のとおりです。

newYPos = oldYPos + prevFallingSpeed + 重力

基本的に、前のフレームで円が「落ちた」ピクセル数に重力率を加算し、それを最後のフレームの円の位置に加算します。

次のコードを使用して、ボールの一部がオブジェクトの内部にあるかどうかを検出しています。

for(var i = 0; i < objects.length; i++){
    if(ball.x > objects[i].x - ball.r && ball.y > objects[i].y - ball.r && ball.x < ball.r + objects[i].x + objects[i].w && ball.y < ball.r + objects[i].y + objects[i].h){
        alert('test');
        gSy = (-1 * gSy);
    }
}

このコードは、円の座標プラスまたはマイナス半径がボックスの壁の上/左の位置よりも大きく、ボックスの壁の右/下の位置よりも小さいかどうかをチェックします。

ボールはある時点でオブジェクトの中にありますが、アラートが表示されません。考えられることはすべて試しました。うまくいけば、私は目に見えないばかげた間違いを犯しているだけです...

私のコードを台無しにしたい場合、または変数を理解していない場合は、jsfiddle を次に示します。

http://jsfiddle.net/JGKx5/

4

1 に答える 1

0

小さな問題:

4 つのオブジェクトがあります。

  • そのうちの 2 つ (1 番と 3 番) は背が高くて痩せていて、左右にずれています。ボールは決して彼らの近くに行きません。
  • そのうちの 1 つ (番号 2) は短くて幅が広く、y 座標はボールがこれまで到達したよりも小さいです。
  • もう 1 つ (番号 0) は短くて幅が広く、y 座標は実際の物理的なボールが通過する座標です。ただし、ボールは個別のステップで移動するため、スクリプトでは実際に移動することはありません。(y=580.4 から y=601.2 になります。)

大きな問題:

jsfiddle では、衝突テストでのすべての比較がまったく間違っているように見えます:-)。(ここのコードのコードは正しい方法であるため、これは奇妙です。)

これらの両方を変更すると (gSy ではなく 0.1*gSy でボールを動かし、すべての比較演算子を反転させました)、衝突が検出されます。

于 2012-07-09T01:31:16.300 に答える