vb2010 Express - 未定义运算符'='

时间:2015-06-08 20:57:41

标签: vb.net

我正在制作复古街机游戏“小行星”,并且在碰撞检测到撞击小行星并将其分成碎片时遇到了一些麻烦。

使用以下代码,我在第二个子例程开始时的If语句中出错: 没有为类型'System.Windows.Forms.PictureBox'和'System.Windows.Forms.PictureBox'定义Operator'='。

Private Sub CollisionDetection_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CollisionDetection.Tick
    Dim Asteroids() = {picLrgAsteroid100, picLrgAsteroid200, picLrgAsteroid300, picLrgAsteroid400, picLrgAsteroid500}
    'Stores all asteroids, used for testing collision for all asteroids
    For Each PictureBox In Asteroids
        'For all asteroids
        If PictureBox.Bounds.IntersectsWith(picBullet1.Bounds) Then
            Me.Controls.Remove(picBullet1)
            AsteroidDestroyer(PictureBox)
        ElseIf PictureBox.Bounds.IntersectsWith(picBullet2.Bounds) Then
            Me.Controls.Remove(picBullet2)
        ElseIf PictureBox.Bounds.IntersectsWith(picBullet3.Bounds) Then
            Me.Controls.Remove(picBullet3)
        End If
        'If it intersects with a bullet
        'Remove the bullet, and transmit to break apart the asteroid
    Next
End Sub

Public Sub AsteroidDestroyer(ByVal Asteroid As System.Windows.Forms.PictureBox)
    If Asteroid = picLrgAsteroid100 Then
    *
    *
    *
    End if

由于我正在使用for ...每个语句,我如何通过“对于小行星中的每个PictureBox”传输哪个PictureBox到子程序'AsteroidDestroyer'并让它接收,然后使用它if语句?

示例(伪代码):

sub CollisionDetection
    If PictureBox (picLrgAsteroid100) intersects with picBullet1 then
        Remove picBullet1
        Transmit to AsteroidDestroyer(picLrgAsteroid100)
    End if
End Sub

Sub AsteroidDestroyer(ByVal Asteroid as PictureBox)
    If Asteroid = picLrgAsteroid100 then
    End If
End Sub

如果你能看到任何改进的方法,为了避免这个问题,我没有理由像现在这样做,所以随时建议!

1 个答案:

答案 0 :(得分:0)

在非专业术语中,您试图比较两个包含引用的变量,在这种情况下,是同一个对象(或可能是同一个对象)。而头号可以"相等"第一个,或包含第一个的变量可以等于"另一个包含数字1的变量,相反,一个对象不能等于自己。平等是对象的属性或值的特征。

在比较对象的引用的情况下,vb.net提供Is Operator。您可能习惯于将值或属性与等号进行比较,

If var1 = var2 Then

执行对象引用的比较,而不是使用“Is”。

If objRef1 Is objRef2 Then

=Is都返回一个表示成功或失败的布尔值(相等/真,或不等/假),但等号比较一个值,Is比较一个引用而不考虑引用的属性。

在您的具体情况下,这转换为,

If Asteroid Is picLrgasteroid100 Then