0

学校の課題で VB でゲームを作成していますが、難易度設定の作成に問題があります。タイトル画面には、難易度を選択できるボタンが 4 つあります。ボタンの 1 つをクリックすると、メイン ゲームの「速度」変数に追加されるはずです。いくつかの方法を試しましたが、まだうまくいかないようです。

これが私が使用しているコードです。

主なゲーム変数:

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

ボタンをクリックすると無効になり、色が変わります。ゲームを開始するときに、ボタンの 1 つが無効になっていると、対応する量が「速度」変数に追加されます。

また、メイン ゲーム フォームに同様のコードを配置しようとしましたが、これも機能しませんでした。私はまだVBのアマチュアであるため、コードをできるだけ単純に保とうとしています。

任意の回答をいただければ幸いです。

4

2 に答える 2

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

于 2012-09-20T12:57:33.323 に答える
0

@AYK が提案したように、この質問を締めくくることができるように、上記のコメントを回答として投稿しています....

少しハックですが、速度変数をグローバル モジュールに移動し、それをグローバルな静的変数にして、それが機能するかどうかを確認できますか?

于 2012-09-21T08:29:58.453 に答える