- ベストアンサー
二つの図形を画面上で同時に動かしたい
Win32API && VC++を使っております。 タイトルの通りですが、 例えばEllipse()関数を2回使って2つの円を描きます。 その円を同時に動かすことはできるのでしょうか? 今の私だと、 for文で一方を少し動かしてから、もう一方を少し動かし、そしてまたもう一方を動かし・・・といった感じにです(マルチスレッドでもできるかもしれませんが・・)。 通常ゲームなどのソフトでは複数の画像や図形が同時に動いていますが、あれらはどういう方法で実現しているのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私は,HSPで同じようなことがあったんですが, スクリーンをロック(redraw 0) 円1を動かす (表示は更新されない 円2を動かす (同上 スクリーンのロックを解除(redraw 1) で,一度に両方動かすんです. VC++は全くわからないので,この方法が使えるかどうかわかりませんが,参考になれば・・・
その他の回答 (1)
例えば円の中心点A(ax,ay)とB(bx,by)が直線で動くとします。 Aは(200,100)→(800,600) Bは(700,300)→(100,500) これをfor文で同時に動かそうとすると、 int n = 200; for (int i = 0; i <= n; i++) { ax = 200 + (800-200) * i / n; ay = 100 + (600-100) * i / n; bx = 700 + (100-700) * i / n; by = 300 + (500-300) * i / n; 円の描画をする 少し待つ } こんな感じになります。 「少し待つ」という部分を実現するプログラムの構造を考えてみる必要があるのですが、このようなforループではうまくいかないと思います。 何かを動かす場合は時間の概念が重要で、経過時間を計測しながら、次に移動させる量を計算しなければならない事が多いです。動くオブジェクト1つ1つに対して、「いつから・いつまで・どこから・どこまで・どんな動き」のようなデータを用意して、そのデータに従って、次に表示させる座標を計算することになります。
お礼
ありがとうございます。 参考になりました。
お礼
ありがとうございます。 スクリーンロックですね。一度調べてみます。