0

Visual Basic で独自のプレーヤーの動きを作成したので、画像をインポートした画像ボックスがあり、矢印キーを使用して動きを作成しました: Public Class Form1

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyData = Keys.Right Then
        Player.Left += 3
    End If

    If e.KeyData = Keys.Left Then
        Player.Left -= 3
    End If

    If e.KeyData = Keys.Up Then
        Player.Top -= 3
    End If

    If e.KeyData = Keys.Down Then
        Player.Top += 3
    End If
    Refresh()

End Sub

唯一の問題は、動きの前に小さな一時停止があることです。皆さんが気づいているかどうかはわかりませんが、キーが押されているとき、男は少し立ち止まります。あたかも上/下/左/右に移動しなければならないことを知っているができないことを知っているかのようです。一時停止の後、ようやく指定されたエリアに移動します。これがなぜなのか、私にはわからないようです...

4

1 に答える 1

1

書き込み中の繰り返しの速度。単語を開いて手紙を持っている場合も同じです。最初に1つ書き込み、しばらくすると繰り返します。それを行う代わりにSDKを使用してゲームを作成する必要がありますが、これで問題は解決します。

そのイベントを使用する代わりに、タイマーを使用して、押されたキーを確認してください。これにより、同時に(対角線上に)あまりにも多くの方向に移動したり、同時に複数のキーを押す必要がある複数の方向に移動したりできます。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If GetKeyState(87) < 0 OrElse GetKeyState(38) < 0 Then : Player.Top -= iVel
    ElseIf GetKeyState(65) < 0 OrElse GetKeyState(37) < 0 Then : Player.Left -= iVel
    ElseIf GetKeyState(68) < 0 OrElse GetKeyState(39) < 0 Then : Player.Left += iVel
    ElseIf GetKeyState(83) < 0 OrElse GetKeyState(40) < 0 Then : Player.Top += iVel
    End If 
End Sub

タイマーの間隔を非常に短くすることをお勧めします(20程度など)。キーを押すために使用される関数は、それを定義する必要があります。

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As IntPtr) As Short

お役に立てれば。ちなみに、私が投稿したコードは矢印キーとWASDキーで動作します。

于 2013-02-19T08:47:33.473 に答える