tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル何処が可笑しいのでしょう?
記事No11324
投稿日: 2008/02/04(Mon) 11:50
投稿者
Option Explicit

    '自機の構造体変数の定義
    Public Type MyType
        X As Integer
        Y As Integer
    End Type
    Public MyType As MyType
    Public X_Max As Integer
    Public Y_Max As Integer
    
Sub main()
    'メインフォームを表示する
'    CrtWidth = 32 * 8: CrtHeight = 32 * 8
    Load MainForm
    MainForm.Show
    
    Do
        DoEvents
        If GetAsyncKeyState(vbKeySpace) Then
            MainForm.opPict.Visible = False
            MainForm.My.Visible = True
            MainRoutine
        ElseIf GetAsyncKeyState(vbKeyEscape) Then
            Exit Do
        End If
    Loop
    End
End Sub

Sub MainRoutine()
    '初期値
    MainForm.My.Move (MainForm.MainPict.Width - MainForm.My.Width) / 2, MainForm.MainPict.Height - MainForm.My.Height
    MyType.X = MainForm.My.Left
    MyType.Y = MainForm.My.Top
    X_Max = MainForm.MainPict.Width - MainForm.My.Width
    Y_Max = MainForm.MainPict.Height - MainForm.My.Height
    
    Do
        MyMove
        MyShow

        DoEvents
        If GetAsyncKeyState(vbKeyEscape) Then
            Exit Do
        End If
    Loop
End Sub

Sub MyMove()
    '自機移動処理
    Select Case stick()
        Case 8 '上キー
            MyType.X = MyType.X
            MyType.Y = MyType.Y - 1
            If MyType.Y <= 0 Then MyType.Y = 0
        Case 2 '下キー
            MyType.X = MyType.X
            MyType.Y = MyType.Y + 1
            If MyType.Y >= Y_Max Then MyType.Y = Y_Max
        Case 6 '右キー
            MyType.X = MyType.X + 1
            MyType.Y = MyType.Y
            If MyType.X >= X_Max Then MyType.X = X_Max
        Case 4 '左キー
            MyType.X = MyType.X - 1
            MyType.Y = MyType.Y
            If MyType.X <= 0 Then MyType.X = 0
        Case 9 '右上キー
            MyType.X = MyType.X + 1
            MyType.Y = MyType.Y - 1
            If MyType.X >= X_Max Then MyType.X = X_Max
            If MyType.Y <= 0 Then MyType.Y = 0
        Case 7 '左上キー
            MyType.X = MyType.X - 1
            MyType.Y = MyType.Y - 1
            If MyType.X <= 0 Then MyType.X = 0
            If MyType.Y <= 0 Then MyType.Y = 0
        Case 3 '右下キー
            MyType.X = MyType.X + 1
            MyType.Y = MyType.Y + 1
            If MyType.X >= X_Max Then MyType.X = X_Max
            If MyType.Y >= Y_Max Then MyType.Y = Y_Max
        Case 1 '左下キー
            MyType.X = MyType.X - 1
            MyType.Y = MyType.Y + 1
            If MyType.X <= 0 Then MyType.X = 0
            If MyType.Y >= Y_Max Then MyType.Y = Y_Max
    End Select
End Sub

Sub MyShow()
    MainForm.My.Move MyType.X, MyType.Y, MainForm.My.Width, MainForm.My.Height
'    BitBlt MainForm.MainPict.hDC, MyType.X, MyType.Y, 240, 330, MainForm.My.hDC, 0, 0, SrcCopy
End Sub

↑のコードを標準モジュールに記載し、実行しています。
キーボード検知をAPIで行い、押されたキーによりMyを動かすまでは問題なくできているのですが、動きが早過ぎている感があります。
私としてはもう少しゆったりとした動きにしたいのですが、何か方法はないでしょうか?

後、実を言いますと、画像転送のAPIも定義済みなのですが、現在コメント表示のBitBlt文では正常に動いてくれません。
こちらも何が問題なのかわかりませんので、ご指摘頂ければ幸いです。

[ツリー表示へ]
タイトルピクチャーの移動スピード
記事No11329
投稿日: 2008/02/04(Mon) 16:49
投稿者
BitBltはメインルーチンの中に、転送先のピクチャーボックスを消す記述をしたら上手く作動しました。

しかし、やはりMyの移動スピードを変速させる事ができません。
(私としてはもう少しゆったりとしたスピードにしたいと考えております)

どなたかご存知でしたら、教えて頂けないでしょうか?

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: ピクチャーの移動スピード
記事No11330
投稿日: 2008/02/04(Mon) 18:19
投稿者花ちゃん
> (私としてはもう少しゆったりとしたスピードにしたいと考えております)

どの程度時間(ミリ秒)でしょうか?

その間待ち時間を作ってあげればいいのでは。

http://hanatyan.sakura.ne.jp/vbhlp/sonota_API.htm
http://hanatyan.sakura.ne.jp/vbhlp/GetTime.htm

# 書いておきながら、なんですが、Sleep 関数は、VBではむやみに使用しないで下さいね。

[ツリー表示へ]
タイトル解決いたしました。
記事No11331
投稿日: 2008/02/05(Tue) 09:21
投稿者
ありがとうございました。

SLEEP関数はあまり使用しない方がいいという事ですので、開始時間と終了時間を指定して、経過時間を計測し、待ち時間を作る方法を使用してやってみようと思います。

ミリ秒に関しては、教えて頂いた関数を参考に試行錯誤してみます。

アドバイス本当にありがとうございました。

[ツリー表示へ]