ふと思いつきまして、VBA で図形部品を組み合わせた棒人間がラジオ体操をする エクセルアニメーション を作ってみようと思います。全部の場面を作るのは結構時間がかかりそうです。なので、ちょっとずつ作っては公開、というようにします。
準備編
考えもまだまとまり切れていないところですが、棒人間の形は以下のようにしました。

部品としては、「頭(円)」、「胴体(長方形)」、「左右手の上腕・下腕(フリーフォーム)」、「左右足の膝上・膝下(フリーフォーム)」というように一度してみます。手足は「直線」でもよいのですが、位置調整をするのにフリーフォームの方がプログラミング的にはとても楽なようなので、そちらで試してみます。ただ、状況により途中で変えるかもしれません。
基本動作完了版
まずは本格動作の前に基本的な動作ができるようにしないといけません。いろいろ試行錯誤をしましたが、なんとかこんな動作ができるようなところまできました。
が、が、当然ながら…、ここまでだけでも紆余曲折あり。作り方や挫折して作り変えた内容を以下に追ってお話しします。
直面した壁
人の動きというのは複雑で、中心位置が固定されていないと、ギクシャクしたり、滑稽な動きとなってしまうことが多いことがとてもよくわかりました。
胴体を回転させる
最初に胴体は左右に回転するプログラムを実装してみました。他の体部位は実装していませんので、当然ながらとても変な動きです。
手足の付け根を連結
次に、手足の付け根部分を胴体の四隅に連結させ、回転に追随するようにプログラムを組んでみました。どうでしょう?
なんか変ですね?首の角度が変わっていないのと、手足がだんだん長くなってしまっています。腕の角度も逆かな?なんだか異次元生物のようです。うーん?
各部位の回転角度の修正
前の状態から各部位の終点の位置について、胴体の回転の角度分を加算するようにしてみました。肘や膝から先の起点はそれに応じて変わるようになっています。こんな動きになりました。
足が踏ん張れていないのと、手足がどんどん伸びるのが、まだいまひとつですね。
手足が伸びるバグを修正
手足が伸びてしまうバグは、回転ループ中の手足の長さを、1つ前のループ時の長さからそのまま加算してしまったことが原因でした。これをリセットするように修正して、次のような動きになりました。
この状態でも、まだ地面を踏みしめられていないため、まだ、空中を泳いでいるかのような動作です。ふうっ。
一旦、ここまで
デバッグをしながら、動きを確認し、それを動画に撮り、編集し、それを上げる、というのもなかなか疲れますね。ボツも多いし。
ということで、一旦ここまでで続きはまた別のページにします。早く体操の動作に行きたいですね。本当は曲に合わせて動きを付けたいのですが、著作権の関係があり曲付きの動画は難しいみたいです。
それではまた!
コメント