お世話になります。
先日からスロットゲームに関して、質問しているものなのですが、リールが止まる時のタイミングについて質問です。
ボタンをクリックすると、回転し自然に止まるスロットなのですが、絵柄を用意してパラパラ漫画の要領で回転を再現してます。
各リール用にタイマーを設置して、1リール目が止まると、2リールのインターバルを0にして、止める構造に
してあるのですが、1~3リールとも同じタイミングで止まってしまいます。
タイマーウェイト処理も停止絵柄の前で止まり、ウェイト後にカックンと止まる始末。
自然にポン、ポン、ポンと止まるように処理するには
どうしたら用意でしょうか。
またご指導のほどよろしくお願いします。
No.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は絵柄を書き換えてるときに使ってる変数です。
No.2
- 回答日時:
基本的に、TimerコントロールはPCのスペックにより
何故か速さが異なります(早くまわそうとすればするほど)。
確認済みかもしれませんが・・・。
だからどうすれば良いか、という事まではちょっと思いつきません・・・。
WindowsAPIのSleep()でもそれだけではどうにも出来ませんし・・・。
60でまわし、止まるにつれて回転は遅くなるはずです。
実機でも。
ピタッとは止まらないでしょう。
そういうスロットは見た事ありませんが・・・^^;
止まる時は60から、インターバルを徐々に上げる事により
速度低下を図る方法ではダメですか?
終了インターバルが1000でダメなら800、600などではどうでしょうか?
No.1
- 回答日時:
インターバルが1000になるまで100ずつ加算し、
1000になったら0にする、とかでゆっくり止まり、
別々に止まるのでは?
現在、Timer1のインターバルが0になった途端に
Timer2のインターバルが0になり、
その途端にTimer3のインターバルが0になっているので、
同時に止まってしまうのではないでしょうか。
勘で言っているので、見当違いでしたら失礼。
ご指導ありがとうございます。
全くおしゃっていただいてる通りなのですが、会社で作成しておりまして、インターバルが100で回転していても「遅い。実機の動きに近づけろ」との上司命令でして、現状60でまわしています。その状態から「ポンポンポンだ」と言われてまして、胃が痛い毎日です。
すいません、お礼が愚痴になってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルが勝手に立ち上がる
-
PostMessageの連続送信
-
メッセージボックスのボタン名変更
-
VBSの処理中一旦処理を止めて再...
-
<input type="file">タグで「キ...
-
MFCのメニューバーのイベント取得
-
探しています~プログレスバー...
-
Application.ScreenUpdating=Fa...
-
VB6 コマンドボタン クリック...
-
エクセルVBAでクリップボード内...
-
ASP.NETでのメッセージ画面を出...
-
キャンセルの方法
-
CreateCompatibleDCを初期化時...
-
B列に特定の文字列が入っている...
-
Excel VBA 実行中に一瞬フリー...
-
「キャンセル」ボタン付きの処...
-
ACCESS側からEXCELの書式を設定...
-
VCでウエイトをミリ秒でかけ...
-
VB6でフォームをリロードしたい
-
アクセスでのキー送信について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBA メッセージボックスを自動...
-
VBA kernel32 の意味
-
Application.ScreenUpdating=Fa...
-
VBA、UserFormを前面に出力して...
-
Excel VBA で処理中断(DoEvents...
-
エクセルVBAでクリップボード内...
-
VBSで応答不要のメッセージボッ...
-
Excel VBA 自動的に閉じるMsgBox
-
VCでウエイトをミリ秒でかけ...
-
キーボード入力、マウス操作を...
-
C#で処理中画面を表示したい。
-
【C#】 あるイベントから別イ...
-
マウスのクリックを無視したい
-
【MFC】イベントの無効化について
-
Excelのワークシートに行を挿入...
-
アクセスでのキー送信について
-
シャットダウン時のExcel強制終...
おすすめ情報