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

画像の変数(リール配列は21個あります。)
画像の種類は7種類

このQ&Aに関連する最新のQ&A

A 回答 (3件)

サンプルです。



フォーム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
    • good
    • 1
この回答へのお礼

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

お礼日時:2001/11/13 01:42

追記です


タイマーコントロールも必要です。。。
    • good
    • 0

現在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の使い方がいまいち分からないので、
すみませんが、コード付きで教えてもらえないでしょうか。
使った事のないコードなので、
よろしくお願いします。

補足日時:2001/11/13 00:43
    • good
    • 0
この回答へのお礼

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

お世話になりました。

お礼日時:2001/11/12 23:54

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラ

添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラーしか出た事がないのですが

Aベストアンサー

他の回答者様の記入通り、拡張子が無い事には判断出来ません。
また、クリックしてもエラーとありますが、webから探すとか出ませんか?
憶測ですが、多分質問者様のPCにこのファイルを開くアプリケーションが
インストールされていないのではないかな?って思います。
参考までに
よくありがちなのは、XPで作ったエクセルファイル等(逆だったかな^^;)を
ビスタのPCで見ると似たようなアイコンになります。
オフィスの互換パックをインストールすると見れます。

Qexcelのマクロを使って決まった入力データ位置の文字を.......

VB(マクロ?)初心者です^^; ご教授お願いします
excelのマクロを使って ”決まった入力データ位置の文字”をコピー(又は切り取り)して同じseet内の違うセル貼り付けしたいのです。
ただし、同じセルに貼り付けては前の入力内容が消えてしまうので、2回目は前回の下のセル、3回目も....この同じ行為を続けたいのです。

                      みんなぁ~ help me 

Aベストアンサー

こんにちは。

一例です。A1に入力されたデータをB列にコピー貼り付けします。
ただし、エラー処理はしていませんので、B列最後のセル(一番下)に貼り付けた後に実行するとエラーになります。

Dim myrng As Range

If Range("B1").Value = "" Then
Range("B1").Value = Range("A1").Value
Else
Set myrng = Range("B" & Rows.Count).End(xlUp)
myrng.Offset(1).Value = Range("A1").Value
End If

Q右クリで画像保存が出ない!

画像を取りたくて矢印を画像に置くと!手のマークに代わり!右クリができなくなりました。
どうしたらよいのでしょうか?

Aベストアンサー

最近のサイトでは著作権の問題もあり、勝手に保存ができないように右クリックができないように設定しいるところが多くなっているであります。法律に抵触する場合もあるであります。

方法としては、色々あるでありますが、ただ見えてる画像が欲しいのであれば、プリントスクリーンでPC画面全体をコピーして、ペイントソフトにペースト、余分な部分を削除して保存すればいいと思うであります。

プリントスクリーンはググってほしいであります。

Q質問2回目になっちゃいます excelのマクロを使って決まった入力データ位置の文字を.......トホホ

入力する場所を決めて、その入力した内容を違う場所にコピーしたいのです 
 このコピーの仕方として、セルC2:M2に入力し 実行ボタン1を選択したら1回目の コピーはC5:M5 2回目はC6:M6 3回目はC7:M7...と順にコピーし

実行ボタン2を選択したら1回目のコピーはC30:M530 2回目はC31:M31 3回目は...と実行1と同じように順にコピーしていきたいのです。

色々本を見たのですが、なかなか理解できず 頭打ちです...
あと似たようなコピーで右移動コピーもしたいのです

           回答まってます  ヨロシクお願いいたします

Aベストアンサー

条件が曖昧すぎます
実行ボタン1を26回選択した場合はC30:M30に上書きするのですか?
実行ボタン1を3回選択、実行ボタン2を3回選択、次に実行ボタン1を選択した場合はC5:M5それともC8:M8?

勝手に決めちゃいます
実行ボタン1は24回以上は選択できない
C5以下C列に入力の無い行を見つけてコピペ
実行ボタン2はC30以下C列に入力の無い行を見つけてコピペ

Sub 実行ボタン1()
Dim rng As Range
Dim i As Integer
Set rng = Range("C5")
For i = 0 To 24
If rng.Offset(i, 0).Value = "" Then
rng.Offset(i, 0).Resize(1, 3).Value = Range("C2:M2").Value
Exit Sub
End If
Next i
End Sub

Sub 実行ボタン2()
If Range("C30").Value = "" Then
Range("C30").Resize(1, 3).Value = Range("C2:M2").Value
Else
Range("C65536").End(xlUp).Offset(1, 0).Resize(1, 3).Value = Range("C2:M2").Value
End If
End Sub

参考まで
あららいけませんね
#1さんのリンク先見ちゃいました
マルチポストはいけません
どちらかを締め切ってください
マナー違反ですよ
回答いただいた方にお礼しないのも
これまたマナー違反ですよ
それでは、おやすみなさい

条件が曖昧すぎます
実行ボタン1を26回選択した場合はC30:M30に上書きするのですか?
実行ボタン1を3回選択、実行ボタン2を3回選択、次に実行ボタン1を選択した場合はC5:M5それともC8:M8?

勝手に決めちゃいます
実行ボタン1は24回以上は選択できない
C5以下C列に入力の無い行を見つけてコピペ
実行ボタン2はC30以下C列に入力の無い行を見つけてコピペ

Sub 実行ボタン1()
Dim rng As Range
Dim i As Integer
Set rng = Range("C5")
For i = 0 To 24
If rng.Offset(i, 0).Value = "" Then
rng.O...続きを読む

Q 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思

 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思います。着衣・水着・スカート、なんでもOKです(あまり小さいサイズじゃない方がよいです)。どうぞよろしくお願いします。

Aベストアンサー

こちらに数点ありました。
http://bsearch.goo.ne.jp/image.php?UI=web&TAB=web&STYPE=0&CC=1&SCRDEF=0&IMGST=0&IMGSZ=0&IMGC=3&IMGFT=0&IMGFT=1&IMGFT=2&IMGFT=3&MOVPT=0&MOVFT=0&MOVFT=1&MOVFT=2&MOVFT=3&AUDPT=0&NSDP=1&KWDP=1&DC=20&FR=1&SM=mc&OCR=1&SITE=&SITE2=&SITE3=&SITE4=&SITE5=&SITEH=&AUDST=0&AUDMST=0&MOVTHN=0&QGR=1&MOVSC=0&NOJSB=0&QGA=1&NOJS=0&AUDSITE=0&MT=%CD%A7%B6%E1&button=%B2%E8%C1%FC%B8%A1%BA%F7
画像を使用される場合は自己責任でお願いします。

QVB.Netで画像の任意の回転方法

VB.Netで、pictureBoxの背景などの
画像の任意(1~360)の回転方法を教えて下さい。
できれば、DirectXを使用しないでですが。

DXを使用する場合としない場合の、
どちらか、もしくは両方をお願いします。

Aベストアンサー

初心者向け
ImageクラスのRotateFlipメソッド

高度な方法
DrawImageメソッドを使って表示させてるなら、始点や終点も指定できるのでポイントを指定するだけ。


こんなことのためにDXを使うのは無駄すぎ。
方法も全然知りません。

Q●「美人アプリ」の画像を保存したい!

●「美人アプリ」というアプリを使用しています。

●ここで表示される画像を保存したいのですが、方法がわかりません。可能かどうかも。。

●もし、方法をご存知の方がいらっしゃいましたら教えていただけませんか?おねがいします。

Aベストアンサー

保存したい画像を表示させて、↓の方法で画面をキャプチャすると、写真アルバムから見れます。
http://blog.livedoor.jp/sakusakupocky/archives/50263981.html

Qピクチャーボックスの画像が欠けてしまいます。

VB.NETとWinXPなのですが、
コマンドボタンを押して、ファイルダイアログボックスを開いて
jpgファイルを指定するとピクチャーボックスにその
画像が表示されるようなものをつくっているのですが、
ピクチャーボックスの上に出るファイルダイアログボックスが重なっていた部分だけ画像が欠けてしまいます。

Picturebox1.Refresh()かなと思って試してみたのですが、今度は全部消えてしまいました。
良い方法があったら教えて頂きたいです。
よろしくお願いします。

Aベストアンサー

どうやってイメージの読込をしてますか
GCに直接描画とかしてませんか
Me.PictureBox1.Image = System.Drawing.Image.FromFile("image.jpg")
みたいな感じでファイル名から読込すればいいかと思いますが

Q右クリ禁止のサイトの画像を保存

質問の通りなのですが右クリック禁止のサイトの画像を保存できるようにする方法はないでしょうか?あと、よく海外でおもしろ動画とかを見せてるサイトがありますが、そういった動画を保存する方法はありますか?重ねて質問すいません^^;

Aベストアンサー

そのサイトを見ないとなんとも言えませんが、
JAVAをオフにしてみると右クリック禁止がはずれる事もあります。

それで駄目ならば、プリントスクリーンを取って画像を修正してください。
まぁ画像を持ち出されたくないサイトならばあまり持ち出さないほうがよろしいかと思います。

ちなみに動画を保存する場合は専用のソフトなどが必要。

Qピクチャーボックスの画像を印刷・BMPで保存したい

ピクチャーボックスの画像を印刷・BMPで保存したいのですがどうやったらいいのかわかりません誰か教えてください

Aベストアンサー

きっとAutoRedrawがFalseのためでは?

Picture1.Refresh
Call SavePicture(Picture1.Image, "c:\test.bmp")
としてあげてみてください


人気Q&Aランキング

おすすめ情報