我目前正在使用Visual Basic 2010 Express中的迷宫游戏。我目前正在为迷宫中的角色进行键盘控制。我有点成功了。我可以使用以下代码移动Picturebox对象:
Private Sub Lvl1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select e.KeyCode
Case Keys.W
Player.Location = New Point(Player.Location.X, Player.Location.Y - 2)
Case Keys.S
Player.Location = New Point(Player.Location.X, Player.Location.Y + 2)
Case Keys.D
Player.Location = New Point(Player.Location.X + 2, Player.Location.Y)
Case Keys.A
Player.Location = New Point(Player.Location.X - 2, Player.Location.Y)
End Select
End Sub
话虽如此,我对结果并不十分满意。当我运行应用程序时,Picturebox会慢慢移动 非常 并且 verrrryyyy 生涩。最重要的是,它无法沿对角线方向移动。我认为这会产生一个非常不实用的游戏,因为用户可能会对类似slug的运动步伐感到非常无聊。有没有办法简单地编程一个Picturebox快速移动2像素增量和平滑(即在改变方向之前没有延迟)?谢谢!
答案 0 :(得分:2)
是的,这并不好用。您需要将键盘事件与控制运动分离,以便它们以不同的速率发生。声明两个跟踪最后一个用户命令的变量:
Dim xdir, ydir As Integer
在KeyDown事件处理程序中轻松设置它们:
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
Select Case e.KeyCode
Case Keys.W : ydir = -1
Case Keys.A : xdir = -1
Case Keys.S : ydir = 1
Case Keys.D : xdir = 1
End Select
End Sub
在KeyUp事件处理程序中有点棘手,用户不一定以可预测的顺序释放它们:
Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
Select Case e.KeyCode
Case Keys.W : If ydir = -1 Then ydir = 0
Case Keys.A : If xdir = -1 Then xdir = 0
Case Keys.S : If ydir = 1 Then ydir = 0
Case Keys.D : If xdir = 1 Then xdir = 0
End Select
End Sub
现在你需要一个"游戏循环"使用这些命令来实现控件的移动。这可以像Timer一样简单,将Interval设置为15或31毫秒,以获得可预测的更新速率。
Dim velocity As Integer = 4
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim newx = PictureBox1.Location.X + velocity * xdir
newx = Math.Min(Math.Max(0, newx), Me.ClientSize.Width - PictureBox1.Width)
Dim newy = PictureBox1.Location.Y + velocity * ydir
newy = Math.Min(Math.Max(0, newy), Me.ClientSize.Height - PictureBox1.Height)
PictureBox1.Location = New Point(newx, newy)
End Sub
答案 1 :(得分:0)
尝试使用KeyPress方法代替KeyDown,
如果不起作用,则必须将代理添加到代码中。
检查MSDN以获取重新http://msdn.microsoft.com/en-us/library/ms172879.aspx
答案 2 :(得分:0)
回答您关于如何以2像素的增量快速移动图片框的问题, 我建议您按照以下替代策略之一进入图片框,因为我知道无法用图片框以优化的方式制作动画。