Visual Basic 2010 Express平滑WASD控件

3程序员5u

我目前正在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移动得非常缓慢,并且发出错误的信号最重要的是,它不能沿对角线方向移动。我认为这会使游戏变得非常不切实际,因为用户可能会对像一样的移动速度感到无聊。是否有任何方法可以简单地对Picturebox进行编程,使其以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

现在,您需要一个使用这些命令来实现控件移动的“游戏循环”。这可以像计时器一样简单,将时间间隔设置为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Visual Basic 2010 Express中解码JSON

来自分类Dev

Visual Basic 2010错误

来自分类Dev

在Visual Basic 2010 Express上上传文件并接收响应

来自分类Dev

在Visual Basic Express 2010中更新SQL查询

来自分类Dev

Visual Basic 2010 express 中的 WCF 服务库

来自分类Dev

#define Visual Basic 2010中的等效项

来自分类Dev

Visual Basic 2010溢出错误

来自分类Dev

清除文本中的Visual Basic 2010问题

来自分类Dev

Visual Basic 2010 Express-将项目添加到ListView

来自分类Dev

如何在Microsoft Visual Basic Express 2010中创建和删除(或移动)自由形状

来自分类Dev

通过Visual Basic 2010打开Python文件

来自分类Dev

Visual Basic 2010-使用代码检索图像

来自分类Dev

使用Visual Basic 2010更新数据库

来自分类Dev

如何使用Visual Basic显示Form Access 2010

来自分类Dev

将事件声明从C#转换为Visual Basic 2010

来自分类Dev

在Visual Basic 2010中写入顺序文件的新行

来自分类Dev

Process.Star 文件中的 Visual Basic 2010 空间

来自分类Dev

Visual Studio Express Edition 2010是免费的吗?

来自分类Dev

Visual Basic Express SQL语句

来自分类Dev

Visual Basic Express SQL语句

来自分类Dev

Visual Studio Express 2013或Visual Studio Pro 2010

来自分类Dev

Visual Basic顺利加载许多控件

来自分类Dev

声明控件数组Visual Basic 6

来自分类Dev

使用Visual Studio 2010资源编辑器对齐控件

来自分类Dev

使用Visual Studio 2010资源编辑器对齐控件

来自分类Dev

VS 2013和Excel 2010中的Visual Basic:找不到xlQualityStandard(未声明)

来自分类Dev

如何从Visual Basic for PowerPoint 2010中的文本文件填充数组

来自分类Dev

从2010年起的Visual Basic PowerPack在2013年不起作用?

来自分类Dev

在Visual Basic 2010上的INSERT INTO命令上获取语法错误到MS ACCESS 2007

Related 相关文章

  1. 1

    在Visual Basic 2010 Express中解码JSON

  2. 2

    Visual Basic 2010错误

  3. 3

    在Visual Basic 2010 Express上上传文件并接收响应

  4. 4

    在Visual Basic Express 2010中更新SQL查询

  5. 5

    Visual Basic 2010 express 中的 WCF 服务库

  6. 6

    #define Visual Basic 2010中的等效项

  7. 7

    Visual Basic 2010溢出错误

  8. 8

    清除文本中的Visual Basic 2010问题

  9. 9

    Visual Basic 2010 Express-将项目添加到ListView

  10. 10

    如何在Microsoft Visual Basic Express 2010中创建和删除(或移动)自由形状

  11. 11

    通过Visual Basic 2010打开Python文件

  12. 12

    Visual Basic 2010-使用代码检索图像

  13. 13

    使用Visual Basic 2010更新数据库

  14. 14

    如何使用Visual Basic显示Form Access 2010

  15. 15

    将事件声明从C#转换为Visual Basic 2010

  16. 16

    在Visual Basic 2010中写入顺序文件的新行

  17. 17

    Process.Star 文件中的 Visual Basic 2010 空间

  18. 18

    Visual Studio Express Edition 2010是免费的吗?

  19. 19

    Visual Basic Express SQL语句

  20. 20

    Visual Basic Express SQL语句

  21. 21

    Visual Studio Express 2013或Visual Studio Pro 2010

  22. 22

    Visual Basic顺利加载许多控件

  23. 23

    声明控件数组Visual Basic 6

  24. 24

    使用Visual Studio 2010资源编辑器对齐控件

  25. 25

    使用Visual Studio 2010资源编辑器对齐控件

  26. 26

    VS 2013和Excel 2010中的Visual Basic:找不到xlQualityStandard(未声明)

  27. 27

    如何从Visual Basic for PowerPoint 2010中的文本文件填充数组

  28. 28

    从2010年起的Visual Basic PowerPack在2013年不起作用?

  29. 29

    在Visual Basic 2010上的INSERT INTO命令上获取语法错误到MS ACCESS 2007

热门标签

归档