すべて「長方形」のオブジェクトの配列があります。オブジェクトである円もあります。私が重力に使用する方程式は次のとおりです。
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 を次に示します。