问一个键盘按键的问题哈!

hackate 2004-07-26 11:14:32
首先谢谢大家帮忙!

问题是这样的:

我的目的是要键盘的左箭头和上荐头,也就是“方向盘”这四个按钮的其中的两个,
比如按下左箭头和上箭头,那么窗体里的控件,比如控件是个圆SHAPE吧,那么
同时按了这两个键以后就斜着上走,这样的效果,可是我做出来的事件做了很多方法都不成啊,请高手赐教,谢谢了!

if keycode = vbleftkey and keycode = vbupkey then
.....执行的事件,这样是不行,可是我又试了不少方法也不行啊,请问个位,我该如何做才能行啊,谢谢个位了啊!!!
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryuginka 2004-07-26
  • 打赏
  • 举报
回复
up
flyingscv 2004-07-26
  • 打赏
  • 举报
回复
哈,这样啊,keydown/up系统没有两个同时的动作
hackate 2004-07-26
  • 打赏
  • 举报
回复
我就把代码写在KEY——D0WN和KEY-UP里面啊,就是不行都嘛,但是单独的比如
keycode=vbleftkey then
..这样当初的执行就没问题啊,就是判断两个键按下才有问题撒
zhuiguo 2004-07-26
  • 打赏
  • 举报
回复
你可以试试下面的:
1、先建立一个工程
2、在窗体上加入控件:Command1,Text1,Text2,Text3及Label1(0),Label1(1),Label1(2),Label(3)
3、把以下代码COPY到代码区
Option Explicit
Dim g_blKeyState(3) As Boolean

'按入
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 37
g_blKeyState(0) = True
Case 38
g_blKeyState(1) = True
Case 39
g_blKeyState(2) = True
Case 40
g_blKeyState(3) = True
End Select
Text1.Text = CStr(KeyCode)
Text3.Text = CStr(Shift)

Dim tmpI As Long
For tmpI = 0 To 3
If g_blKeyState(tmpI) Then
Call myMove(CInt(tmpI))
End If
Next

Call myKeyState
End Sub

'释放
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 37
g_blKeyState(0) = False
Case 38
g_blKeyState(1) = False
Case 39
g_blKeyState(2) = False
Case 40
g_blKeyState(3) = False
End Select
Text2.Text = CStr(KeyCode)

Call myKeyState
End Sub

Private Sub Form_Load()
With Me
.Text1.Enabled = False
.Text1.Text = ""
.Text2.Enabled = False
.Text2.Text = ""
.Text3.Enabled = False
.Text3.Text = ""
.Command1.Enabled = False
End With

Dim tmpI As Long
For tmpI = 0 To 3
g_blKeyState(tmpI) = False
Next
End Sub

Private Sub myKeyState()
Dim tmpI As Long
For tmpI = 0 To 3
Label1(tmpI).Caption = g_blKeyState(tmpI)
Next
End Sub

Private Sub myMove(iIndex As Integer)
With btn1
Select Case iIndex
Case 0
.Left = .Left - 10
Case 1
.Top = .Top - 10
Case 2
.Left = .Left + 10
Case 3
.Top = .Top + 10
End Select
End With
End Sub

4、按F5运行看看:)
liangwu 2004-07-26
  • 打赏
  • 举报
回复

用GetAsyncKeyState获取按键信息,键值你先可以测试一下

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
jam021 2004-07-26
  • 打赏
  • 举报
回复
要把代码写到key_press或key_down里
flyingscv 2004-07-26
  • 打赏
  • 举报
回复
应该都可以的 :)
Geo_Cra 2004-07-26
  • 打赏
  • 举报
回复

楼上基本方法错误。

再说一次:
定时用GetAsyncKeyState检测键盘状态就可以了
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
应用事例见:http://www.aivisoft.net/Source/Dead.rar
这是我写的一个两人格斗游戏,虽然游戏速度有点慢,但是说明了怎么使得两人能够同时用键盘控制人物。
顺便说一句,这是所有游戏的标准方法,任何一本游戏编程的书里面都是这么写的。
熊孩子开学喽 2004-07-26
  • 打赏
  • 举报
回复
上面的程序一共使用了三个全局变量:LeftRight UpDown Shoot
分别用来表示左右,上下,射击。这段代码是我以前写的一个小射击游戏里面截下来的。
因为左和右是互斥的,所以只用一个变量,上下也是互斥的,也用一个变量
楼主明白了吗。
Geo_Cra 2004-07-26
  • 打赏
  • 举报
回复
定时用GetAsyncKeyState检测就可以了
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
熊孩子开学喽 2004-07-26
  • 打赏
  • 举报
回复
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case KeyLeft: LeftRight = -1
Case KeyRight: LeftRight = 1
Case KeyUp: UpDown = -1
Case KeyDown: UpDown = 1
Case KeySpace: Shoot = True
End Select
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case KeyLeft: LeftRight = 0
Case KeyRight: LeftRight = 0
Case KeyUp: UpDown = 0
Case KeyDown: UpDown = 0
Case KeySpace: Shoot = False
End Select
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧