• ベストアンサー

画像処理について。(移動)

今、スロットのアプリケーションを作成中なのですが、 いまいちリールの回転が滑らかじゃありません。 試してみたのが、ピクチャーを12345と作り、 1番目の画像を2番目へ.....と一つずつずらしていく方法 (画像をずらす) もう一つ 12345とピクチャーを作り、 ピクチャーボックスの位置を動かしていく方法 (1が2の位置へ2が...5が1の位置へ) この二つの方法ではいまいち滑らかにリールが回転するようには、見えません。(timeの関数を使ってあります) よい方法が有りましたらぜひ教えてください。 画像の変数(リール配列は21個あります。) 画像の種類は7種類

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

サンプルです。 フォーム1[Form1] ├コマンドボタン1[Command1] │ ├コマンドボタン2[Command2] │ ├ピクチャボックス1[Pictur1] ││ │└ピクチャボックス2[Pictur2] │ └ピクチャボックス3[Pictur3] となるように画面に各コントロールを貼り付けてください。 ピクチャボックス2はピクチャボックス1の中に入れてください。 lngPicW/lngPicHでピクチャの1つの領域範囲を設定してます。 lngMoveVectでピクチャの移動量を設定してます。これはlngPicHを割り切れる数字に設定した方が、スムーズに動きます。 Option Explicit Private Const lngPicW  As Long = 100  'ピクチャの幅 Private Const lngPicH  As Long = 100  'ピクチャの高さ Private Const lngMoveVect  As Long = 5   'ピクチャの移動量(高さを割り切れる数字が好ましい) 'スクロールを行うピクチャの高さ Private lngScrollPicH  As Long Private Sub Command1_Click()   Dim wkAry  As Variant   Dim i    As Long   Dim lngCntPic  As Long      '絵の情報   wkAry = Array( _         "C:\WINNT\しゃくなげ.bmp" _        , "C:\WINNT\グリーン ストーン.bmp" _        , "C:\WINNT\サポテック織り.bmp" _        , "C:\WINNT\サンタフェ.bmp" _        , "C:\WINNT\シャボン.bmp" _        )      'ピクチャの数   lngCntPic = UBound(wkAry) + 1      'スクロールピクチャの高さ取得   lngScrollPicH = (lngCntPic + 1) * lngPicH   With Me     .Command1.Enabled = False     .Command2.Enabled = True        With .Picture1       .Visible = True     End With          With .Picture2       .Visible = True              .Width = lngPicW       .Height = lngScrollPicH       .Left = 0       .Top = lngPicH - lngScrollPicH     End With          For i = 0 To lngCntPic - 1       .Picture3.Picture = LoadPicture(wkAry(i))       Call .Picture2.PaintPicture(.Picture3.Picture, 0, (lngCntPic - i) * lngPicH, lngPicW, lngPicH, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy)       If i = 0 Then         Call .Picture2.PaintPicture(.Picture3.Picture, 0, 0, lngPicW, lngPicH, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy)       End If     Next i        End With    End Sub Private Sub Command2_Click()   Dim blnWork As Boolean   With Me     blnWork = Not .Timer1.Enabled          If blnWork Then       .Command2.Caption = "停止"     Else       .Command2.Caption = "回転"     End If     .Timer1.Enabled = blnWork        End With End Sub Private Sub Form_Load()   '各初期設定です   'あらかじめデザイン時にここのForm_Loadイベントでしていることを設定しておくと、Form_Loadのイベントは省略できます   With Me     With .Command1       .Caption = "初期設定"       .Enabled = True     End With          With .Command2       .Caption = "回転"       .Enabled = False     End With        With Timer1       .Enabled = False       .Interval = 1     End With           .ScaleMode = vbPixels          With .Picture1       .ScaleMode = vbPixels       .AutoSize = False       .Visible = False       .Appearance = 0       .BorderStyle = 0       .AutoRedraw = True       .Enabled = False       .Cls              .Width = lngPicW       .Height = lngPicH     End With          With .Picture2       .ScaleMode = vbPixels       .AutoSize = False       .Visible = False       .Appearance = 0       .BorderStyle = 0       .AutoRedraw = True       .Enabled = False       .Cls     End With          With .Picture3       .ScaleMode = vbPixels       .AutoSize = True       .Visible = False       .Appearance = 0       .BorderStyle = 0       .AutoRedraw = True       .Enabled = False       .Cls     End With        End With    End Sub Private Sub Timer1_Timer()   Dim lngTop  As Long   With Me     'TOP位置を計算     lngTop = .Picture2.Top + lngMoveVect     If lngTop >= 0 Then       lngTop = lngPicH - lngScrollPicH     End If     .Picture2.Top = lngTop   End With End Sub

kakuunn
質問者

お礼

大変わかりやすく記入いただき、ありがとうございます ぜひ試してみます。

その他の回答 (2)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

追記です タイマーコントロールも必要です。。。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

現在21個のピクチャボックスを用意してるのでしょうか? 1つのピクチャボックスに描画することにより、処理が軽くなり、スライドをしてるように見せることができます。 21個は面倒なので、仮に5個で説明します。 1つのピクチャの幅=50 1つのピクチャの高さ=30 とします。 1.ピクチャボックス1をフォーム中に用意する 2.ピクチャボックス1の幅=50/高さ=30 3.ピクチャボックス2をピクチャボックス1の中に用意する 4.ピクチャボックス2幅=50/高さ=30*(5個+1) 5.PaintPicturで上から1/5/4/3/2/1の順番で描画 6.ピクチャボックス2のTOPを(-1*5*30)に設定 このとき一番下のピクチャが表示されているように見える。 7.ピクチャボックス2のTOP初期値がこの場合-150で、タイマーにより-149、-148と徐々にずらす。 8.ピクチャボックス2のTOP=0のとき、6の処理へ戻る

kakuunn
質問者

お礼

お返事ありがとうございます。 さっそく試してみます。 お世話になりました。

kakuunn
質問者

補足

PaintPicturの使い方がいまいち分からないので、 すみませんが、コード付きで教えてもらえないでしょうか。 使った事のないコードなので、 よろしくお願いします。

関連するQ&A