• 締切済み

for文の実行速度を遅くしたいのですが

For t = 0 To 6 Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t)) Next t こういうfor文だと、一瞬でtが6まで行ってしまうので アニメーションとして成り立ちません。 ゆっくりfor文を実行させたいのですが そういうのはあるのでしょうか?

みんなの回答

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

こんにちは。 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)
回答No.3

★アドバイス ・アニメーションとしたい場合はタイマー・イベントを使って記述したほうが良いと思います。  for 分ではなくてタイマー・カウントを変数で用意します。  そのカウンタの値(0-6)で直線などを描画すればゆっくりと描画できます。  また、タイマー間隔を変更すれば自由に描画スピードをカスタマイズできます。 ・簡単な方法では回答者 No.2 さんの Sleep() 関数と DoEvents メソッドをループ内に  記述するれば楽です。本格的なアニメーションを行うなら別スレッドを作成して実行させるか、  タイマー・イベントを組み合わせて下さい。 ・以上。今後の参考に!

回答No.2

APIのSleepをループ内に挟むという手もありますよ。 待機時間をミリ秒単位で設定できるので、調整も 行いやすいでしょう。 あと、ループごとに確実に描画させるために、DoEventsも挟んだほうがいいと思います。 (もしくはPicture1.RefreshでもOKかな?) 但し、Sleep中は、確かスレッド内の全ての処理が停止するので、例えば アニメーション中に、アプリ中のコマンドボタンを押そうとしたりしても すぐにはイベントプロシージャが動作しません。

  • SRitchie
  • ベストアンサー率21% (103/470)
回答No.1

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遅らせたいと言うのであれば、タイマを入れた方が良いけど…

関連するQ&A