Движение объекта клавишами.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

Движение объекта клавишами.

Сообщение Олег Козлов » 20.12.2005 (Вт) 14:09

Как заставить двигаться объект клавишами по форме равномерно?
Да так, чтобы при нажатии одновременно, например, клавиш влево и вниз, чтобы он двигался по диагонали.

Отпускаем клавишу - перестает двигаться.

Вот что я сделал:

Код: Выделить всё
Option Explicit

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDown Then
    tmr_down.Enabled = True
    Call tmr_down_Timer
End If
If KeyCode = vbKeyUp Then
    tmr_up.Enabled = True
    Call tmr_up_Timer
End If
If KeyCode = vbKeyLeft Then
    tmr_left.Enabled = True
    Call tmr_left_Timer
End If
If KeyCode = vbKeyRight Then
    tmr_right.Enabled = True
    Call tmr_right_Timer
End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDown Then tmr_down.Enabled = False
If KeyCode = vbKeyUp Then tmr_up.Enabled = False
If KeyCode = vbKeyLeft Then tmr_left.Enabled = False
If KeyCode = vbKeyRight Then tmr_right.Enabled = False
End Sub

Private Sub tmr_up_Timer()
Shape1.Top = Shape1.Top - 100
End Sub

Private Sub tmr_down_Timer()
Shape1.Top = Shape1.Top + 100
End Sub

Private Sub tmr_left_Timer()
Shape1.Left = Shape1.Left - 100
End Sub

Private Sub tmr_right_Timer()
Shape1.Left = Shape1.Left + 100
End Sub


Но тогда он движется неравномерно, т.е. сначала нормально, потом быстро.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 20.12.2005 (Вт) 14:16

4 таймера не нужно, достаточно одного.

Код: Выделить всё
Option Explicit
Dim Keys(0 To 255) As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Keys(KeyCode) = True
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Keys(KeyCode) = False
End Sub

Private Sub Timer1_Timer()
If Keys(vbKeyLeft) Then Shape1.Left = Shape1.Left - 100
If Keys(vbKeyRight) Then Shape1.Left = Shape1.Left + 100
If Keys(vbKeyUp) Then Shape1.Top = Shape1.Top - 100
If Keys(vbKeyDown) Then Shape1.Top = Shape1.Top + 100
End Sub
Программисты не глючат - глючат компиляторы...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 92

    TopList