“为什么我的角色不能在VB.Net中移动?” [编辑]

时间:2019-03-24 21:25:22

标签: vb.net

我正在将Visual Studio 2010 Ultimate用于RPG游戏。不幸的是,当角色与NPC交谈后没有任何物品时,我的角色突然无法移动。我不知道如何移动它。这是我的代码。

我的动作代码是

Dim walk As Integer

Private Sub room1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

    'Up
    If e.KeyCode = Keys.W Then
        walk = walk + 1
        If walk = 5 Then
            walk = 1
        End If

        If walk = 1 Then
            picmc.Image = My.Resources.yuiUp.mc10
            moveUp()
        End If
        If walk = 2 Then
            picmc.Image = My.Resources.yuiUp.mc11
            moveUp()
        End If
        If walk = 3 Then
            picmc.Image = My.Resources.yuiUp.mc12
            moveUp()
        End If
        If walk = 4 Then
            picmc.Image = My.Resources.yuiUp.mc11
            moveUp()
        End If
    End If

    'Down
    If e.KeyCode = Keys.S Then
        walk = walk + 1
        If walk = 5 Then
            walk = 1
        End If
        If walk = 1 Then
            picmc.Image = My.Resources.yuiDown.mc1
            moveDown()
        End If
        If walk = 2 Then
            picmc.Image = My.Resources.yuiDown.mc2
            moveDown()
        End If
        If walk = 3 Then
            picmc.Image = My.Resources.yuiDown.mc3
            moveDown()
        End If
        If walk = 4 Then
            picmc.Image = My.Resources.yuiDown.mc2
            moveDown()
        End If
    End If

    'Left
    If e.KeyCode = Keys.A Then
        walk = walk + 1
        If walk = 5 Then
            walk = 1
        End If
        If walk = 1 Then
            picmc.Image = My.Resources.yuiLeft.mc4
            moveLeft()
        End If
        If walk = 2 Then
            picmc.Image = My.Resources.yuiLeft.mc5
            moveLeft()
        End If
        If walk = 3 Then
            picmc.Image = My.Resources.yuiLeft.mc6
            moveLeft()
        End If
        If walk = 4 Then
            picmc.Image = My.Resources.yuiLeft.mc5
            moveLeft()
        End If
    End If

    'Right
    If e.KeyCode = Keys.D Then
        walk = walk + 1
        If walk = 5 Then
            walk = 1
        End If
        If walk = 1 Then
            picmc.Image = My.Resources.yuiRight.mc7
            moveRight()
        End If
        If walk = 2 Then
            picmc.Image = My.Resources.yuiRight.mc8
            moveRight()
        End If
        If walk = 3 Then
            picmc.Image = My.Resources.yuiRight.mc9
            moveRight()
        End If
        If walk = 4 Then
            picmc.Image = My.Resources.yuiRight.mc8
            moveRight()
        End If
    End If

有我的子功能:

'Moving character
Sub moveUp()
    picmc.Top -= 20
End Sub

Sub moveDown()
    picmc.Top += 20
End Sub

Sub moveRight()
    picmc.Left += 20
End Sub

Sub moveLeft()
    picmc.Left -= 20
End Sub

这是我的问题!!当两个项目仍在游戏中处于活动状态(假设用户未获得这些项目)时,他/她需要找到它,但问题是..角色并不能自行移动! :(

   Private Sub btnOldie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOldie.Click
    If tooth.Visible = False AndAlso comb.Visible = False Then
        lblDialog.Text = "Find the oldie to the next room."
        Me.Hide()
        room2.Show()
    Else
        noItems()
    End If
End Sub

这是我的NoItems()函数:

Sub noItems()
    btnTooth.Visible = False
    btnComb.Visible = False
    btnOldie.Visible = False
    btnOk.Visible = True
    lblDialog.Text = "Find that thing first."
End Sub

1 个答案:

答案 0 :(得分:0)

您的问题比您想象的要复杂。问题是,您不需要一小段代码。您需要一种查看代码的新方法。

您想要的是一个名为“状态”的设计模式。

Here's a link,只为您。

只是为了帮助您开始,这里有一些提示。您的角色可以做很多事情。您可以将这些状态划分为多个状态。也许您的角色可以保持闲置,行走,奔跑,跳跃,摔倒和死亡。所有这些都是状态,通过强制执行这些状态,您可以拥有一个可以“更改规则”的遮罩,您的角色会在所有这些情况下都遵守。例如,对于这些状态中的每个状态,您的角色可能具有不同的动画。这些的最大速度可能也会有所不同。也许他在某些情况下变得脆弱或无敌。

通过强制执行状态,您可以围绕角色的行为创建严格的结构,这既易于自定义,也难以进行异常处理。大多数游戏都使用这种模式。

好的编程!