我正在将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
答案 0 :(得分:0)
您的问题比您想象的要复杂。问题是,您不需要一小段代码。您需要一种查看代码的新方法。
您想要的是一个名为“状态”的设计模式。
Here's a link,只为您。
只是为了帮助您开始,这里有一些提示。您的角色可以做很多事情。您可以将这些状态划分为多个状态。也许您的角色可以保持闲置,行走,奔跑,跳跃,摔倒和死亡。所有这些都是状态,通过强制执行这些状态,您可以拥有一个可以“更改规则”的遮罩,您的角色会在所有这些情况下都遵守。例如,对于这些状态中的每个状态,您的角色可能具有不同的动画。这些的最大速度可能也会有所不同。也许他在某些情况下变得脆弱或无敌。
通过强制执行状态,您可以围绕角色的行为创建严格的结构,这既易于自定义,也难以进行异常处理。大多数游戏都使用这种模式。
好的编程!