【问题标题】:Visual basic loop without freezing program?没有冻结程序的Visual Basic循环?
【发布时间】:2014-01-06 19:09:33
【问题描述】:

我在下面制作了一个循环,让怪物在我的游戏中四处移动,当整个游戏冻结后循环运行......有什么想法可以让循环每 5 秒重复一次吗?

            Randomize()
        Dim value As Integer = CInt(Int((4 * Rnd()) + 1))
    Do
        If value = 1 Then
            If Me.mob2.Location.X < 750 Then
                Me.mob2.Location = New Point(Me.mob2.Location.X + 1, Me.mob2.Location.Y)
            End If
        ElseIf value = 2 Then
            If Me.mob2.Location.Y < 549 Then
                Me.mob2.Location = New Point(Me.mob2.Location.X, Me.mob2.Location.Y + 1)
            End If
        ElseIf value = 3 Then
            If Me.mob2.Location.X > 12 Then
                Me.mob2.Location = New Point(Me.mob2.Location.X - 1, Me.mob2.Location.Y)
            End If
        ElseIf value = 4 Then
            If Me.mob2.Location.X < 750 Then
                Me.mob2.Location = New Point(Me.mob2.Location.X + 1, Me.mob2.Location.Y)
            End If
        End If
    Loop

定时器不起作用:

    Private Sub Timer()
    ' Timer.interval = 1000
End Sub

【问题讨论】:

  • 您可以在该函数上放置一个计时器,每 5 秒调用一次,然后您可以完全移除循环。
  • 问题是:什么计时器,我做了 Thread.Sleep(50) 并且它仍然冻结......另外,它冻结了 while 程序,而不是函数......
  • 你必须做一个计时器,它是VB中的一个对象(你可以从UI编辑器中拖动它或者在加载时自己声明一个)。计时器将有一个函数,它将每 x 毫秒调用一次,因此您只需让计时器的滴答声调用您的函数,然后一起删除循环。
  • 正如你现在拥有的那样,你只有一个无限循环,所以它会一直一直锁定你的程序。添加睡眠不会改变它是一个无限循环并且永远不会完成从而锁定您的程序的事实。
  • 哦,我试图让它像一个人工智能一样让我的怪物四处走动,有什么想法可以在没有无限循环的情况下做到这一点吗?

标签: vb.net


【解决方案1】:

不是一个好的解决方案,但这将帮助您理解问题

屏幕不刷新的问题试试这个:

    Do

    application.doevents() '' so each time it loops it will refresh your screen

    If value = 1 Then
        If Me.mob2.Location.X < 750 Then
            Me.mob2.Location = New Point(Me.mob2.Location.X + 1, Me.mob2.Location.Y)
        End If
    ElseIf value = 2 Then
        If Me.mob2.Location.Y < 549 Then
            Me.mob2.Location = New Point(Me.mob2.Location.X, Me.mob2.Location.Y + 1)
        End If
    ElseIf value = 3 Then
        If Me.mob2.Location.X > 12 Then
            Me.mob2.Location = New Point(Me.mob2.Location.X - 1, Me.mob2.Location.Y)
        End If
    ElseIf value = 4 Then
        If Me.mob2.Location.X < 750 Then
            Me.mob2.Location = New Point(Me.mob2.Location.X + 1, Me.mob2.Location.Y)
        End If
    End If
Loop

【讨论】:

  • Use of Application.DoEvents()How to use DoEvents() without being “evil”? DoEvents 在这里可能是错误的建议。
  • 我同意,但是只用 vb 制作图形对象没有额外的库是第一个错误
  • 谢谢 :D 这很有帮助,我认为它很有用,但我没有 15 个代表点 :P
  • visual basic 不好吗?你建议游戏使用什么语言? @bto.rdz
  • vb 是完美的,但这不是最好的解决方案,因为您的应用程序会很慢,因为每次调用 doevents 它都会刷新您的所有应用程序,请查看@LarsTech 提到的文章,您可以查看我的答案作为解决方案点击下面的检查上下票,它会给你一些声誉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2023-03-26
  • 2021-02-16
  • 1970-01-01
  • 2018-07-16
相关资源
最近更新 更多