1

visual basic 对 Public Sub CheckCollision 的论点太多?请帮忙

Public Class Form1
    Dim intSpeedX As Integer = 2
    Dim intSpeedY As Integer = -2
    Dim intScore As Integer
    Dim intLives As Integer = 3
    Dim intAllGone As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        AllGone = 0
        CheckCollisions()
        If AllGone = 1 Then
            Timer1.Enabled = False
            MsgBox("You finished the game!", , "CONGRATULATIONS")
        End If

        BallX += SpeedX
        If BallX < 3 Or BallX + Ball.Width > Me.Width - 5 Then
            SpeedX = -SpeedX
        End If
        BallY += SpeedY
        If BallY < 3 Then
            SpeedY = -SpeedY
        End If

        If BallY + Ball.Height > Me.Height - 5 Then
            Timer1.Enabled = False
            UpdateLives()
            BallX = 232
            BallY = 376
            SpeedX = 2
            SpeedY = -2
            If Lives < 1 Then
                MsgBox("You have lost the game.", , "OH NAWW MAN DAT SUCKS!")
            Else
                MsgBox("You missed!", , "OH NOOOO")
                Timer1.Enabled = True
            End If
        End If
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        Paddle.Left = e.X - Paddle.Width \ 2
    End Sub

    Public Sub CheckCollisions()
        CheckCollision(Paddle, False)  <---error here with the false
        CheckCollision(Red1)
        CheckCollision(Red2)
        CheckCollision(Red3)
        CheckCollision(Red4)
        CheckCollision(Red5)
        CheckCollision(Yellow1)
        CheckCollision(Yellow2)
        CheckCollision(Yellow3)
        CheckCollision(Yellow4)
        CheckCollision(Yellow5)
        CheckCollision(Green1)
        CheckCollision(Green2)
        CheckCollision(Green3)
        CheckCollision(Green4)
        CheckCollision(Green5)
        CheckCollision(Blue1)
        CheckCollision(Blue2)
        CheckCollision(Blue3)
        CheckCollision(Blue4)
        CheckCollision(Blue5)
    End Sub

    Public Sub CheckCollison(ByVal src As PictureBox, ByVal Hide As Boolean)
        If src.Visible = True Then
            If BallX > src.Location.X And _
                BallX < src.Location.X + src.Size.Width And _
                Ball.Location.Y > src.Location.Y And _
                Ball.Location.Y < src.Location.Y + src.Size.Height Then
                SpeedY = -SpeedY
                UpdateScore()
                If Hide Then
                    src.Visible = False
                End If
            End If
            AllGone += 1
        End If
    End Sub

    'declare the overloaded version of CheckCollision
    Public Sub CheckCollision(ByVal src As PictureBox)
        'call the original version
        CheckCollision(src, True) <------error here
    End Sub

    Public Sub UpdateScore()
        Score += 10
        Label2.Text = "SCORE: " & Score
    End Sub

    Public Sub UpdateLives()
        Lives -= 1
        Label1.Text = "LIVES: " & Lives
    End Sub

    Public Property BallX() As Integer
        Get
            Return Ball.Left
        End Get
        Set(ByVal Value As Integer)
            Ball.Left = Value
        End Set
    End Property

    Public Property BallY() As Integer
        Get
            Return Ball.Top
        End Get
        Set(ByVal Value As Integer)
            Ball.Top = Value
        End Set
    End Property

    Public Property Lives() As Integer
        Get
            Return intLives
        End Get
        Set(ByVal Value As Integer)
            intLives = Value
        End Set
    End Property

    Public Property SpeedX() As Integer
        Get
            Return intSpeedX
        End Get
        Set(ByVal Value As Integer)
            intSpeedX = Value
        End Set
    End Property

    Public Property SpeedY() As Integer
        Get
            Return intSpeedY
        End Get
        Set(ByVal Value As Integer)
            intSpeedY = Value
        End Set
    End Property

    Public Property Score() As Integer
        Get
            Return intScore
        End Get
        Set(ByVal Value As Integer)
            intScore = Value
        End Set
    End Property

    Public Property AllGone() As Integer
        Get
            Return intAllGone
        End Get
        Set(ByVal Value As Integer)
            intAllGone = Value
        End Set
    End Property

End Class
4

1 回答 1

0

CheckCollision用:

Public Sub CheckCollision(ByVal src As PictureBox)
    'call the original version
    CheckCollision(src, True) <------error here
End Sub

它只接受一个参数,所以

CheckCollision(src, True)

不起作用,因为它调用了覆盖的子。

于 2013-03-27T13:26:11.763 回答