アプリ版:「スタンプのみでお礼する」機能のリリースについて

For t = 0 To 6
Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t))
Next t

こういうfor文だと、一瞬でtが6まで行ってしまうので
アニメーションとして成り立ちません。
ゆっくりfor文を実行させたいのですが
そういうのはあるのでしょうか?

A 回答 (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
    • good
    • 5

★アドバイス


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

APIのSleepをループ内に挟むという手もありますよ。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています