help:按键不放的时候Key_Down过程中获得的keycode值停一下才改变

kmlxk0 2005-07-07 09:05:45
想做个简单的游戏,用方向键控制。可是按键不放的时候Key_Down过程中获得的keycode值好像会停一下才改变,请问怎么解决?
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmlxk0 2005-08-04
  • 打赏
  • 举报
回复
参与有奖
hwshws123 2005-08-04
  • 打赏
  • 举报
回复
参与一下
kmlxk0 2005-07-07
  • 打赏
  • 举报
回复
高手没来还是怎么说

==========================
搜了2小时终于找到了
摘自:http://www.zjol.com.cn/vbbible/software/program/vb/vb5faq/vb5faq3.htm
==========================

平順的鍵盤移動

--------------------------------------------------------------------------------

疑惑的人

欲以Keyboard控制圖形移動,如何才能使圖形移動的更流利,而不會有先移動一格 ==> Delay ==> 再連續不停的移動的現象呢?

老怪答:

以鍵盤移動圖形,就要明了 KeyBoard 在 VB 裏引發事件的順序,當我們按下一鍵首先是 KeyDown 一次,接著是連續的 KeyPress,直到放開按鍵,KeyPress 結束,KeyUp 產生一次,就合成了一個按鍵循環。
鍵盤按下多久會引發 KeyDown 事件,及 KeyPress 多久會重覆一次,跟 WinDows 鍵盤設定有關,跟硬體速率更有關,所以每台電腦的表現都不一樣,因此用KeyBoard 去驅動圖形移動必然會有不同電腦設備上會有不同的表現,而無法做到穩定的表現。
對於遊戲程式來說,這是個必須突破的難關,下面是一種解決的辦法:
請你在表單上放一個 timer ,timer.enabled=false
當 KeyDown 時 timer.enabled=true
當 KeyUp 時 timer.enabled=false
在 timer 事件裏寫圖形移動敘述
如此影響你執行速度的就只有 KeyUp 和 KeyDown ,其他就是 Timer.Interval 的設定速度問題,而不再受到 KeyPress 回應速率的控制。
下面是我寫的一段,請自行比較是否比完全由 KeyPress 較順暢。

Option Explicit
Dim 橫向 As Integer
Dim 縱向 As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim 非方向鈕 As Boolean
Select Case KeyCode
Case vbKeyLeft
橫向 = -60
縱向 = 0
Case vbKeyRight
橫向 = 60
縱向 = 0
Case vbKeyUp
橫向 = 0
縱向 = -60
Case vbKeyDown
橫向 = 0
縱向 = 60
Case Else
非方向鈕 = True
End Select

If Not 非方向鈕 Then
Timer1.Enabled = True
End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Timer1.Enabled = False
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 30
Me.WindowState = 2
Me.Show
Image1.Move (Me.ScaleWidth - Image1.Width) / 2, (Me.ScaleHeight -
Image1.Height) / 2
End Sub

Private Sub Timer1_Timer()
Image1.Left = Image1.Left + 橫向
Image1.Top = Image1.Top + 縱向
End Sub

7,763

社区成员

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

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