• 締切済み

VB6.0でアニメーション

現在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

みんなの回答

回答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

l06071
質問者

お礼

1050YENさんのようなプログラムソースの書き方もあるのだと 思いました。アドバイスありがとうございましたー!!! 参考URL見てみます! いろいろとアドバイスをありがとうございました!

  • uruz
  • ベストアンサー率49% (417/840)
回答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 でいいのでは?

l06071
質問者

お礼

実は、あまり、IPictureDispとPictureの使い分けの仕方がわかっていません。すみません。。。 また、プログラムのソースの訂正あいがとうございました! 本当に助かりました。おかげで、かなり助かりました!!! 本当にありがとうございました~。

  • uruz
  • ベストアンサー率49% (417/840)
回答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.1

VB6.0は良く知りませんが、Timer1_Timer()の中で 変数animeを0~3までループしているので、一瞬の間にanime0からanime3までを表示してるので、見た目にはanime0の次にanime3が表示されているように見えているのだと思います。 Timer1_Timer()の中で 変数animeを0~3までループしてはいけません。この関数の起動毎に1枚ずつ順番に表示するように作らないといけません。とりあえず、変数animeをスタティックな変数にして、関数が呼ばれる度に更新するようにすれば良いと思います。

l06071
質問者

お礼

アドバイス、ありがとうございました。

関連するQ&A

専門家に質問してみよう