今、スロットのアプリケーションを作成中なのですが、
いまいちリールの回転が滑らかじゃありません。
試してみたのが、ピクチャーを12345と作り、
1番目の画像を2番目へ.....と一つずつずらしていく方法
(画像をずらす)
もう一つ
12345とピクチャーを作り、
ピクチャーボックスの位置を動かしていく方法
(1が2の位置へ2が...5が1の位置へ)
この二つの方法ではいまいち滑らかにリールが回転するようには、見えません。(timeの関数を使ってあります)
よい方法が有りましたらぜひ教えてください。
画像の変数(リール配列は21個あります。)
画像の種類は7種類
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
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の処理へ戻る
この回答への補足
PaintPicturの使い方がいまいち分からないので、
すみませんが、コード付きで教えてもらえないでしょうか。
使った事のないコードなので、
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- CAD・DTP AUTO CAD操作方法 円に接する方法 3 2022/06/03 12:06
- その他(ブログ) シーサーブログのタイトル文字位置とブログ説明文字位置の変更方法 2 2022/09/22 20:55
- Windows 10 マルチディスプレイの段差移動 2 2023/05/05 13:21
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- Illustrator(イラストレーター) 会社の名刺作成時にロゴを配置する方法 3 2023/06/06 18:06
- YouTube YouTubeはTV番組、映画の違法アップロードに対して収益金を支払っているか否か? 1 2022/04/30 20:12
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- その他(IT・Webサービス) ロリポップのレンタルサーバーを借りてます。(一般的な安いプラン) 元々はホームページでも作ろうと思っ 1 2023/05/24 19:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像処理について。(移動)
-
画像をランダムに表示させたい...
-
画像処理
-
ボールが壁に当たって跳ね返る...
-
[vb.net] 起動したFrom2を閉じ...
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
GetNextWindowがDLLファイルUse...
-
[Excel2000]auto_closeを止めさ...
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
comboboxのクリックイベントに...
-
VB.NETでのイベントの途中終了
-
ユーザーフォームへのデータ入...
-
VBAのユーザーフォームで、テキ...
-
基本的な質問で本当に申し訳あ...
-
subsequentとnextの違いってな...
-
VBSのプログラム
-
条件に該当したテキストボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウスポインタの変更
-
Matlabでsin波を使って矩形波を...
-
SavePictureで保存できない
-
FlexGridで文字色を変更。
-
(VB)ピクチャボックスに表示し...
-
画像処理について。(移動)
-
ボールが壁に当たって跳ね返る...
-
画像処理
-
画像をランダムに表示させたい...
-
VBによる回帰直線のプログラム
-
VBでbmpのビットを抜出す
-
Matlab/SimulinkのChirp信号に...
-
SCALEの使い方教えてください
-
PictureBoxでのアニメーション...
-
画像ファイルの高さと幅の取得
-
リソースファイルの選択
-
picture boxの画像をimageに上...
-
Picture box の サイズを変更
-
消す軌跡と残す軌跡
-
VB6でマウスのドラッグで範囲を...
おすすめ情報