tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 何処が可笑しいのでしょう?
投稿日: 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文では正常に動いてくれません。
こちらも何が問題なのかわかりませんので、ご指摘頂ければ幸いです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。