- 締切済み
for文の実行速度を遅くしたいのですが
For t = 0 To 6 Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t)) Next t こういうfor文だと、一瞬でtが6まで行ってしまうので アニメーションとして成り立ちません。 ゆっくりfor文を実行させたいのですが そういうのはあるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 Waitでも良いですよ。 For t = 0 To 6 Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t)) Application.Wait (Now + TimeValue("0:00:03")) '←3秒待ち(ここを変更する) Next t
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・アニメーションとしたい場合はタイマー・イベントを使って記述したほうが良いと思います。 for 分ではなくてタイマー・カウントを変数で用意します。 そのカウンタの値(0-6)で直線などを描画すればゆっくりと描画できます。 また、タイマー間隔を変更すれば自由に描画スピードをカスタマイズできます。 ・簡単な方法では回答者 No.2 さんの Sleep() 関数と DoEvents メソッドをループ内に 記述するれば楽です。本格的なアニメーションを行うなら別スレッドを作成して実行させるか、 タイマー・イベントを組み合わせて下さい。 ・以上。今後の参考に!
- K-Sogacchi
- ベストアンサー率53% (50/93)
APIのSleepをループ内に挟むという手もありますよ。 待機時間をミリ秒単位で設定できるので、調整も 行いやすいでしょう。 あと、ループごとに確実に描画させるために、DoEventsも挟んだほうがいいと思います。 (もしくはPicture1.RefreshでもOKかな?) 但し、Sleep中は、確かスレッド内の全ての処理が停止するので、例えば アニメーション中に、アプリ中のコマンドボタンを押そうとしたりしても すぐにはイベントプロシージャが動作しません。
- SRitchie
- ベストアンサー率21% (103/470)
2行目と3行目の間にディレイ(タイマ)を入れてみては? For t = 0 To 6 Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t)) for delay=0 to xxxxx '<- xxxxxに適当な数値を入れる next Next t 厳密に数ms遅らせたいと言うのであれば、タイマを入れた方が良いけど…