2012-09-20 37 views
0

如果在VB上爲某個學校作業創建了一個遊戲,並且無法創建難度設置。我的標題屏幕上有四個按鈕,您可以在其中選擇一個難度。當你點擊其中一個按鈕時,它應該添加到主遊戲中的「速度」變量上。我嘗試了一些方法,但它似乎仍然不起作用。從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。

任何答案將不勝感激。

+0

那麼現在發生了什麼? 'gameMain.speed'總是設置爲5? –

+0

是的,它保持爲5 –

+0

您是否通過代碼進行調試以查看它是否被實際執行?也許'gameMain.Show()'執行遠離你的方法的其餘部分。嘗試移動到最後一行,看看它是否有幫助。 –

回答

4

您的代碼僅更改「速度」字段,它不會重新計算xVel和yVel的值。

您解決此問題的速度爲屬性而不是字段。屬性setter可以調整速度矢量:

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工作下一步。

+0

我通過使用全局模塊解決了這個問題,但是關於角度的觀點很有趣。我可能會研究它,謝謝 –

+0

那麼,不要那樣做。全局變量很少解決問題,他們只是添加新的。 –

0

至於建議由@AYK我上面張貼我的評論作爲一個答案,所以我們可以關閉這個問題....

它的一個黑客位,但你可以移動速度變成一個全球性的模塊,使其成爲一個全局靜態變量,看看是否可行?

相關問題