改变矢量方向

时间:2018-05-23 15:31:43

标签: vb.net

我正试图在VB.net上做一个Pong仿冒品。但是,一旦它到达屏幕之外,我很难设法让球对象改变方向。这就是我现在所拥有的:

Option Explicit On
Option Infer Off
Option Strict On
Public Class Form1
    'Declare variables here
    Dim P1Score As Integer = 0
    Dim P2Score As Integer = 0
    Dim velocity As Integer = 1
    Dim RandGen As New Random
    Dim angle As Integer
    'This function defines the X-value movement
    Private Function angleCalcX(ByVal angle As Integer) As Integer
        Dim xSpeed As Integer

        xSpeed = Convert.ToInt16(ball.Location.X + (velocity * System.Math.Cos(angle)))
        If ball.Bounds.IntersectsWith(Player1.Bounds) OrElse ball.Bounds.IntersectsWith(Player2.Bounds) Then
            xSpeed = Convert.ToInt16(-(ball.Location.X + (velocity * System.Math.Cos(angle))))
        End If
        Return xSpeed
    End Function

    Private Function angleCalcY(ByRef angle As Integer) As Integer
        Dim ySpeed As Integer
        ySpeed = Convert.ToInt16(ball.Location.Y + (velocity * System.Math.Sin(angle)))
        If (ball.Bounds.IntersectsWith(background.Bounds)) = False Then
            ySpeed = Convert.ToInt16(-(ball.Location.Y + (velocity * System.Math.Sin(angle))))

        End If
        Return ySpeed
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MessageBox.Show("Hello, and welcome to Pong! This is a 2-player game. Player 1 uses the W and S keys, and Player 2 uses the K and I keys. First to five goals wins. Press space to start!", "Start Screen.jpg", MessageBoxButtons.OK, MessageBoxIcon.Information)
        angle = RandGen.Next(1, 360)
    End Sub
    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        ball.Location = New Point(angleCalcX(angle), angleCalcY(angle))
        If ball.Location.X > 1049 Then
            P1Score += 1
            velocity = 1
        ElseIf ball.Location.X < 12 Then
            P2Score += 1
            velocity = 1
        End If
    End Sub


    Public Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.S Then
            Player1.Top += 25
        ElseIf e.KeyCode = Keys.W Then
            Player1.Top -= 25
        ElseIf e.KeyCode = Keys.K Then
            Player2.Top += 25
        ElseIf e.KeyCode = Keys.I Then
            Player2.Top -= 25
        End If
    End Sub

    Private Sub quitButton_Click(sender As Object, e As EventArgs) Handles quitButton.Click
        Me.Close()
    End Sub
End Class

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

Timer2_Tick

中遗漏了这样的内容
ElseIf ball.Location.Y < 12 OrElse ball.Location.Y > 600 Then
    ySpeed = -ySpeed  'Make a bounce from top/bottom edge

但是其他代码也需要改进很多。例如,我没有看到将Int16用于速度或代码硬编码边界的原因。