Программирование
Веб программирование

Работа с клавиатурой в vb.net

 
 

Очень часто при создании игр начинающий гейм - мейкер сталкивается с проблеммой передвижения объекта. Т.е. при нажатии в верх и в бок объект или останавливается, или идет только в одну сторону. Для решения этой проблеммы есть очень хороший способ о котором будет написанно в этом шаге.
Сейчас мы сделаем программу, которая будет двигать PictureBox во все стороны. На форме размести PictureBox, вот код:

' Переменные L(Left), R(Right), U(Up), D(Down) задают направление движения PictureBox, если True - то PIctureBox движется, если False то стоит.
Dim L As Boolean = False
Dim R As Boolean = False
Dim U As Boolean = False
Dim D As Boolean = False

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown' При нажатии на какую - либо клавишу:
If e.KeyCode = Keys.F1 Then Dvijok()' Если нажата F1, то запускаем программу. Вобще функцию Dvijok() надо было указать в Form_Load, но тогда программа зависнет(как это избежать ты узнаешь в следующих шагах). И поэтому приходится активировать программу после нажатия клавиши F1.

If e.KeyCode = Keys.Left Then' Если нажата клавиша влево, то:
L = True' PictureBox движется влево
R = False' Если PictureBox двигался вправо, то он останавливается
End If

If e.KeyCode = Keys.Right Then' Если нажата клавиша вправо, то:
R = True' Здесь аналогично
L = False
End If

If e.KeyCode = Keys.Up Then' Если нажата клавиша вверх, то:
U = True
D = False
End If

If e.KeyCode = Keys.Down Then' Если нажата клавиша вниз, то:
D = True
U = False
End If
End Sub

Function Dvijok()' Объявляем функцию Dvijok(), она активируется только после нажатия на F1
Do' Запускаем вечный цикл
Application.DoEvents()' Это чтобы цикл не зацикливался
If L = True Then PictureBox1.Left = PictureBox1.Left - 1' Если L = True то двигаем PictureBox влево
' Здесь аналогично
If R = True Then PictureBox1.Left = PictureBox1.Left + 1
If U = True Then PictureBox1.Top = PictureBox1.Top - 1
If D = True Then PictureBox1.Top = PictureBox1.Top + 1
Loop
End Function

Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp' При отжатии какой - либо клавиши:
If e.KeyCode = Keys.Left Then L = False' Если отжата клавиша Left то L=False(т.е. если объект двигался влево то он остановится)
If e.KeyCode = Keys.Right Then R = False
If e.KeyCode = Keys.Up Then U = False
If e.KeyCode = Keys.Down Then D = False
End Sub 

Теперь запути проект(F5), нажми на F1, и управляй PictureBox. Исходник


Есть вопросы? Спроси на нашем форуме!!
Лиля [29.09.2011 11:15]

программа не работает, исходник тоже

Лиля [29.09.2011 11:19]

надо же на F1 нажать

Гость [08.12.2011 12:12]

А вот если любой лишний объект поставить, например кнопку - перестает работать; хоть затыкайся F1. ))

алексей [08.12.2011 14:31]

конечно фокус будет на кнопке а не на форме
если с кнопкой надо кнопку .enabke=false
или все эти действие кода перекинуть или скопировать с формы на кнопку

алексей [08.12.2011 14:47]

можно ещё сделать функцию Picdown(keycodepic as integer) и Picup
Function Pic
down(keycodepic as integer)
If KeyCode
pic = Keys.F1 Then Dvijok()
If KeyCodepic = Keys.Left Then
L = True
R = False
End If
If KeyCode
pic = Keys.Right Then
R = True
L = False
End If
If KeyCodepic = Keys.Up Then
U = True
D = False
End If
If KeyCode
pic = Keys.Down Then
D = True
U = False
End If
end function

вот как применять функцию

Private Sub Form1KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Pic
down( e.KeyCode as integer) ' в этом месте возможно ошибка . Просто я ситексис VB.Net незнаю , я только на VB6 програмирую
End sub
' с функцией Picdawn(KeyCodepic) анологично

алексей [08.12.2011 14:49]

ой
' с функцией Picup(KeyCodepic) анологично


Picdown( e.KeyCode as integer)
и
Pic
up( e.KeyCode as integer)
' эти функции можно вставлять и на форму и на кнопку и на любые другие компоненты



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.