現在VB6.0で簡単なアニメーションの作成を行おうと思っています。
あまりプログラミングが得意ではないので、分かる人教えてください。
一応自分なりに以下の様なプログラムを書いてみました。
やりたいことは、4枚の画像を使って、その画像をパラパラ漫画の様に
アニメーションにしたいです。
処理方法としては、コマンドをクリックすると、タイマーが動きだして
画像がパラパラと変化するような感じにしたくて、以下の様にしました。
このプログラムだと、はじめの画像の次に最後の画像(anime3)が出てきてしまいます。
はじめの画像の次にanime0→anime1→anime2…と画面に表示されるようにするためにはどのようにしたらいいですか?
分かる人がいたら教えて頂きたいです。
よろしくお願い致します。
●プログラムソース
Private Nekos(3) As IPictureDisp
Private Sub Command1_Click()
Timer1 = True
End Sub
Private Sub Form_Load()
Timer1 = False
End Sub
Private Sub Timer1_Timer()
Dim anime As Long
anime = 0
For anime = 0 To 3
Set Nekos(anime) = LoadPicture("F:\yobi_0406\glad\neko" & anime & ".bmp")
Image1.Picture = Nekos(anime)
anime = (anime + 1)
If anime > 3 Then
anime = 0
End If
Next anime
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
VB6.0は良く知りませんが、Timer1_Timer()の中で 変数animeを0~3までループしているので、一瞬の間にanime0からanime3までを表示してるので、見た目にはanime0の次にanime3が表示されているように見えているのだと思います。
Timer1_Timer()の中で 変数animeを0~3までループしてはいけません。この関数の起動毎に1枚ずつ順番に表示するように作らないといけません。とりあえず、変数animeをスタティックな変数にして、関数が呼ばれる度に更新するようにすれば良いと思います。
No.2
- 回答日時:
一回のタイマイベント内でanime0~anime3をImage1にセットしています、タイマイベントを脱けるまではImage1の表示は更新されませんのでタイマイベントを脱けた時に最後にセットしたanime3が表示されることになります
Private Nekos(3) As IPictureDisp
Private TCount as long
Private Sub Command1_Click()
Timer1 = True
End Sub
Private Sub Form_Load()
Dim i as long
for i=0 to 3
Set Nekos(i) = LoadPicture("F:\yobi_0406\glad\neko" & cstr(i) & ".bmp")
next i
Timer1 = False
End Sub
Private Sub Timer1_Timer()
Image1.Picture = Nekos(TCount)
TCount = (TCount + 1) mod 4
End Sub
-----------------------------------------
Private Nekos(3) As IPictureDisp
なぜ"IPictureDisp"を使用するのでしょうか?
VB6には"Picture"オブジェクトが用意されています
Private Nekos(3) As Picture
でいいのでは?
No.3
- 回答日時:
一回のタイマイベント内でanime0~anime3をImage1にセットしています、タイマイベントを脱けるまではImage1の表示は更新されませんのでタイマイベントを脱けた時に最後にセットしたanime3が表示されることになります
Private Nekos(3) As IPictureDisp
Private TCount as long
Private Sub Command1_Click()
Timer1 = True
End Sub
Private Sub Form_Load()
Dim i as long
for i=0 to 3
Set Nekos(i) = LoadPicture("F:\yobi_0406\glad\neko" & cstr(i) & ".bmp")
next i
Timer1 = False
End Sub
Private Sub Timer1_Timer()
Image1.Picture = Nekos(TCount)
TCount = (TCount + 1) mod 4
End Sub
-----------------------------------------
Private Nekos(3) As IPictureDisp
なぜ"IPictureDisp"を使用するのでしょうか?
VB6には"Picture"オブジェクトが用意されています
Private Nekos(3) As Picture
でいいのでは?
実は、あまり、IPictureDispとPictureの使い分けの仕方がわかっていません。すみません。。。
また、プログラムのソースの訂正あいがとうございました!
本当に助かりました。おかげで、かなり助かりました!!!
本当にありがとうございました~。
No.4
- 回答日時:
せっかくタイマーを利用しているのに、1度目のタイマーイベント内でループが高速に行われ、マッハ的なサブリミナルでパラパラアニメが完了しているようです。
************************************************************
「タイマー自体がループ」という認識を持ったらよいかと思います。
************************************************************
Option Explicit
Private Const DEF_絵のパス As String = "F:\yobi_0406\glad\"
Private Sub Command1_Click()
Timer1 = True
End Sub
Private Sub Form_Load()
Timer1 = False
Timer1.Interval = 500
Timer1.Tag = 0
End Sub
Private Sub Timer1_Timer()
Dim img As IPictureDisp
Dim picIndex As Integer
picIndex = CInt(Timer1.Tag)
Image1.Picture = LoadPicture(DEF_絵のパス & "neko" & picIndex & ".bmp")
picIndex = picIndex + 1
If picIndex > 3 Then
picIndex = 0
End If
Timer1.Tag = picIndex
End Sub
ついでに、パラパラでは無いけど、参考URL
http://okwave.jp/qa/q167464.html
1050YENさんのようなプログラムソースの書き方もあるのだと
思いました。アドバイスありがとうございましたー!!!
参考URL見てみます!
いろいろとアドバイスをありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
-
ループ内での条件処理
-
DOSコマンドのループ内のTIMEコ...
-
アクティブセルから、A列最終行...
-
VBA Dir関数でファイルをループ...
-
VBA for i=1 to lastrow
-
UWSCの終了の仕方
-
GIFアニメをループさせたくない
-
while(*s++=*t++)の判定は?
-
範囲指定したセルを1つずつ飛...
-
どなたかこのプログラミングを...
-
Javascriptでalertを大量のルー...
-
テキストボックスの名前に変数...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
Java 南京錠
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
おすすめ情報