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

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

VB6.0は良く知りませんが、Timer1_Timer()の中で 変数animeを0~3までループしているので、一瞬の間にanime0からanime3までを表示してるので、見た目にはanime0の次にanime3が表示されているように見えているのだと思います。



Timer1_Timer()の中で 変数animeを0~3までループしてはいけません。この関数の起動毎に1枚ずつ順番に表示するように作らないといけません。とりあえず、変数animeをスタティックな変数にして、関数が呼ばれる度に更新するようにすれば良いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/12 01:44

一回のタイマイベント内で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
でいいのでは?
    • good
    • 0

一回のタイマイベント内で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
でいいのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/12 01:47

せっかくタイマーを利用しているのに、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/12 01:50

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