Мышь.
Все знают, что в интерфейсе Windows (да и не только) срабатывание щелчка по кнопке срабатывает в момент отпускания клавиши мыши.
Вот скромная реализация подобного на Blitz3D:
Dim IMMouseUP (3)
Dim IMMouseDown(3)
Dim IMMouseHit (3)
Function IMUpdate()
Local i
For i=1 To 3
IMMouseUP( i ) = IMMouseDown( i )
IMMouseHit( i ) = (MouseHit( i ) > 0)
IMMouseDown( i ) = MouseDown( i )
If(IMMouseUP( i ) = True And IMMouseDown( i ) = False)
IMMouseUP( i ) = True
Else
IMMouseUP( i ) = False
EndIf
Next
End Function
В начало игрового цикла вставляем IMUpdate().
Приставка IM - Input manager (Менеджер ввода)
Вместо MouseDown пишем IMMouseDown
Вместо IMMouseHit пишем IMMouseHit
И конечно IMMouseUP, которая возвращаят True при отпускании кнопки.
Это решает сразу 2 беды.
1) Нет MouseUP
2) Как вы наверное заметили, при повторном вызывании ф-ции MouseHit или MouseDown в цикле функция возвращает False, хотя при первом вызове True. Чтобы этого избежать приходилось заводить глобальные переменные. Теперь это в прошлом.