在VB上更改不同形式的变量

时间:2012-09-20 10:19:56

标签: .net vb.net

我一直在VB上为学校作业创建一个游戏,我在创建难度设置时遇到了麻烦。我的标题屏幕上有四个按钮,您可以在其中选择难度。当你点击其中一个按钮时,它应该添加到主游戏的“速度”变量上。我尝试了一些方法,但似乎仍无法正常工作。

这是我正在使用的代码。

主要游戏变量:

Public speed As Single = 5
Dim xVel As Single = Math.Cos(speed) * speed
Dim yVel As Single = Math.Sin(speed) * speed

标题屏幕代码(难度选择):

Private Sub btnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlay.Click
    gameMain.Show()

    If btnEasy.Enabled = False Then
        gameMain.speed = 5
    End If

    If btnMedium.Enabled = False Then
        gameMain.speed = gameMain.speed + 2
    End If

    If btnHard.Enabled = False Then
        gameMain.speed = gameMain.speed + 5
    End If

    If btnInsane.Enabled = False Then
        gameMain.speed = gameMain.speed + 10
    End If

End Sub

因此,当您单击按钮时,它将被禁用并更改颜色。当你开始游戏时,如果其中一个按钮被禁用,它应该将相应的数量添加到“速度”变量。

我也尝试在主游戏表单上添加类似的代码,但也没有用。 我试图保持代码尽可能简单,因为我仍然是VB的业余爱好者。

任何答案都将不胜感激。

2 个答案:

答案 0 :(得分:4)

您的代码仅更改“速度”字段,不会重新计算xVel和yVel的值。

您可以通过将速度设为属性而不是字段来解决此问题。属性设置器可以调整速度矢量:

Private _speed As Single
Private xVel As Single
Private yVel As Single
Private angle As Single

Public Sub New()
    InitializeComponent()
    Speed = 5
End Sub

Public Property Speed() As Single
    Get
        Return _speed
    End Get
    Set(ByVal value As Single)
        _speed = value
        xVel = _speed * Math.Cos(angle)
        yVel = _speed * Math.Sin(angle)
    End Set
End Property

您需要继续使用angle

答案 1 :(得分:0)

根据@AYK的建议,我将上述评论作为答案发布,以便我们可以结束这个问题....

它有点像黑客,但你可以将速度变量移动到一个全局模块,使它成为一个全局静态变量,看看它是否有效?