プロが教えるわが家の防犯対策術!

お世話になります。
先日からスロットゲームに関して、質問しているものなのですが、リールが止まる時のタイミングについて質問です。
ボタンをクリックすると、回転し自然に止まるスロットなのですが、絵柄を用意してパラパラ漫画の要領で回転を再現してます。
各リール用にタイマーを設置して、1リール目が止まると、2リールのインターバルを0にして、止める構造に
してあるのですが、1~3リールとも同じタイミングで止まってしまいます。
タイマーウェイト処理も停止絵柄の前で止まり、ウェイト後にカックンと止まる始末。
自然にポン、ポン、ポンと止まるように処理するには
どうしたら用意でしょうか。
またご指導のほどよろしくお願いします。

A 回答 (3件)

VB6のタイマーは,はっきり言って使えません。


と言うのは,タイマーイベントはWindows上で動くので,
どうしても他のアプリケーションやタスクの影響を受けるからです。

それでは,どうやって正確な時間を測るかですが,
これにはWindowsAPIのTimeGetTimeを使います。
使い方は,検索エンジンでTimeGetTimeって引けば出てきます。

簡単に紹介すると,TimeGetTimeはシステムが起動してからの
時間を測るためのものです。これを使うには,まず

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

を一番上の欄外でグローバル変数として宣言する必要があります。
つぎに,たとえばある一定の時間待つようなSubルーチンを作るなら,
Private Sub Wait(WaitTime As Long)
Dim TimeStart As Long
StartTime = timeGetTime
Do
DoEvents
Loop While (timeGetTime - StartTime < WaitTime)
End Sub
のようにします。

これを応用して,リールの止まる際にランダムでウェイト時間を
足して行けば,ゆっくり回転するようになります。
もちろん,ランダムで数字を加えますので,
同時に止まることはありません。
解りにくい場合は,また補足します。

この回答への補足

ご指導ありがとうございます。
早速新しいプロシージャをつくりSubルーチンをコピペさせていただき、(General)に宣言部分を記述しました。
そして停止タイマー部に

Image2(old2).Visible = False
Image2(idx2).Visible = True
old2 = idx2

If Timer1.Interval = 0 Then
waittime = 2         ここを追加し
If idx2 = 0 Then
Timer2.Interval = 0
ElseIf idx2 = 3 Then
Timer2.Interval = 0
ElseIf idx2 = 6 Then
Timer2.Interval = 0
以下略

追加部分の数字を変えてみたりしたのですが、思う様に動いていません。記述の仕方がおかしいのでしょうか、それともAPIの使い方やソースの書き方などが根本的に間違ってますか。

ちなみにidx2は絵柄を書き換えてるときに使ってる変数です。

補足日時:2005/10/29 12:42
    • good
    • 0
この回答へのお礼

とりあえずランダムで出した係数に、読み込み枚数を何枚か足して、タイムラグをつける方法になりました。
またよろしくお願いします。

お礼日時:2005/11/01 01:55

基本的に、TimerコントロールはPCのスペックにより


何故か速さが異なります(早くまわそうとすればするほど)。
確認済みかもしれませんが・・・。
だからどうすれば良いか、という事まではちょっと思いつきません・・・。
WindowsAPIのSleep()でもそれだけではどうにも出来ませんし・・・。

60でまわし、止まるにつれて回転は遅くなるはずです。
実機でも。
ピタッとは止まらないでしょう。
そういうスロットは見た事ありませんが・・・^^;

止まる時は60から、インターバルを徐々に上げる事により
速度低下を図る方法ではダメですか?
終了インターバルが1000でダメなら800、600などではどうでしょうか?
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
先ほど検証しましたが、600でも上司の顔色が変わりません。
トホホ・・・・

お礼日時:2005/10/29 12:41

インターバルが1000になるまで100ずつ加算し、


1000になったら0にする、とかでゆっくり止まり、
別々に止まるのでは?
現在、Timer1のインターバルが0になった途端に
Timer2のインターバルが0になり、
その途端にTimer3のインターバルが0になっているので、
同時に止まってしまうのではないでしょうか。

勘で言っているので、見当違いでしたら失礼。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
全くおしゃっていただいてる通りなのですが、会社で作成しておりまして、インターバルが100で回転していても「遅い。実機の動きに近づけろ」との上司命令でして、現状60でまわしています。その状態から「ポンポンポンだ」と言われてまして、胃が痛い毎日です。
すいません、お礼が愚痴になってしまいました。

お礼日時:2005/10/29 01:10

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