物理演算、その2

■実はちょっとウソつおてます
 今回のソースは、なんとなく物理計算ぽい動きをしているところがあります。

■考え方
 物理演算の場合、よくある箱と箱のコリジョンをするような考え方では計算しません、大きく「各頂点の計算」と「各頂点から形を維持する計算」の2つの計算をしていきます。
 「各頂点の計算」には、「頂点の加速」「頂点にかかる重力」「壁とのコリジョン」「他の箱とのコリジョン」の4つの計算が含まれます。

■「頂点の加速」「頂点にかかる重力」
「move」に頂点の加速部分が入っています。そしてY方向にY重力としてY方向に数値を足します。
「control」は計算していく上で頂点が動けない状態(壁があってこれ以上進めないなど)の場合、計算をしないためのフラグです。

 for (int i = 0; i < boxPotinMax; i++)
 {
     pos[i] += move[i];
     pos[i].Y += 0.10f;
     control[i] = false;
 }

■壁とのコリジョン
これは、壁にあたった場合、それ以上進まないように計算しています。

 for (int i = 0; i < boxPotinMax; i++)
 {
     if( pos[ i ].Y < 0 ){
         move[i].X = 0.0f;
         move[i].Y *= -0.01f;
         control[i] = true;
         pos[i].Y = 0;
     }
     if( pos[ i ].Y > dispHeight ){
         move[i].X = 0.0f;
         move[i].Y *= -0.01f;
         control[i] = true;
         pos[i].Y = dispHeight;
     }
     if( pos[ i ].X < 0 ){
         move[i].X *= -0.01f;
         move[i].Y = 0.0f;
         control[i] = true;
         pos[i].X = 0;
     }
     if( pos[ i ].X > dispWidth ){
         move[i].X *= -0.01f;
         move[i].Y = 0.0f;
         control[i] = true;
         pos[i].X = dispWidth;
     }
 }

■他の箱とのコリジョン
 この部分は「物理演算、その4」で
■各頂点から形を維持する計算
 この部分は「物理演算、その3」で