Я создаю игру, в которой используются Control.MouseButtons
и GetActiveWindow()
, например:
Private Declare Auto Function GetActiveWindow Lib "user32.dll" () As IntPtr
Public Sub GetMouseState(ByRef x As Integer, ByRef y As Integer, ByRef lButton As Boolean)
Dim p As Point = Parent.PointToClient(Windows.Forms.Cursor.Position)
x = p.X
y = p.Y
lButton = _
(Control.MouseButtons And MouseButtons.Left) = MouseButtons.Left AndAlso _
Parent.Handle = GetActiveWindow()
End Sub
(Parent
- это Form
.)
.случается самое странное;в первой «сцене» моей игры (меню) это работает правильно.Во втором (реальный игровой процесс) это не похоже на работу.Происходит самое странное: я могу проверить, что этот метод работает в методе рендеринга:
Dim down As Boolean
Game.GetMouseState(0, 0, down)
If down Then g.Clear(Color.Red)
И, конечно же, когда я щелкаю мышью, экран становится красным.Однако мой объект не двигается.Когда я снимаю проверку Parent.Handle = GetActiveWindow()
, мой объект движется !!Вот код для этого, хотя это, вероятно, не имеет значения:
Dim mouseX, mouseY As Integer, mouseDown As Boolean
Game.GetMouseState(mouseX, mouseY, mouseDown)
If mouseDown Then
Dim mouseLocation As New PointF(mouseX - Game.Width \ 2, mouseY - Game.Height \ 2)
centerParticle.MoveTowards(mouseLocation, centerParticle.Location)
End If
Разве GetActiveWindow () не возвращает правильное значение, только когда моя игра запущена?: P