多関節キャラ

 多関節キャラの実装方法について考えます。

多関節キャラ

 1.パーツの接合部

 例えば昆虫型の多関節キャラを作ろうとしたら昆虫の運動を調べなくてはいけないかもしれませんし、人型の多関節キャラを作ろうと思ったら人間がどう動くのかよく考察しなければいけないのかもしれません。座標計算とかよりそっちの方が難しいような気がします。ここでは、簡単な例を考えます。

パーツ

 上のようなパーツを組み合わせて、膝を曲げ伸ばしするロボットを作ります。

接合部

 4つのパーツは、上図のような3つの接合部の点によってつながっているものとします。胴と足は常にまっすぐで、脚の上半分、下半分は水平に対して角度joint_angleだけ傾いているとします。joint0とjoint1の距離、joint1とjoint2の距離は32ドットとします。

 すると、どれかの点を基準として、残りの2つの点の座標を計算することができます。joint2を基準とします。接合部の座標を(joint_x.0 , joint_y.0)〜(joint_x.2 , joint_y.2)とし、X軸のマイナス方向を0度、反時計回りを角度の正の方向とすると、
  joint_x.1=joint_x.2+32*cos(-joint_angle)
  joint_y.1=joint_y.2+32*sin(-joint_angle)
  joint_x.0=joint_x.1+32*cos(180度+joint_angle)
  joint_y.0=joint_y.1+32*sin(180度+joint_angle)
 となります。

 2.各パーツの中心部の座標

 各パーツの中心座標を、下図のように決めます。

各パーツの中心座標

 脚の上部の中心座標はjoint0とjoint1の中間、脚の下部の中心座標はjoint1とjoint2の中間の位置です。各パーツの中心座標を配列変数parts_cx , parts_cyに入れることにすると(下のパーツほど大きい要素番号です)
  parts_cx.0=joint_x.0-8
  parts_cy.0=joint_y.0-48
  parts_cx.1=(joint_x.0+joint_x.1)/2
  parts_cy.1=(joint_y.0+joint_y.1)/2
  parts_cx.2=(joint_x.1+joint_x.2)/2
  parts_cy.2=(joint_y.1+joint_y.2)/2
  parts_cx.3=joint_x.2-8
  parts_cy.3=joint_y.2+16
 となります。

 あとは表示するだけです。joint2の画面上の位置さえ決めれば、全体の位置が決まります。表示の際に脚の上部、下部を何度傾ければいいかというと、三角形の内角の和は180度ですから、脚の下部は90度−joint_angleとなります。上部は−(90度−joint_angle)です。

脚の下部の角度

 joint_angleを徐々に小さくすればしゃがみ、大きくすれば脚を伸ばします。joint2を放物線状に動かせばジャンプさせることもできます。


[サンプルプログラムをダウンロード] (HSP Ver2.61+hspext.dll+hmm.dll用)
[サンプルプログラムをダウンロード] (HSP Ver3用)
 ロボットがしゃがみ、膝を伸ばし、ジャンプし、を繰り返します。

[目次へ][前へ][次へ] inserted by FC2 system