Vb.net 如何对衍生阵列使用冲突检测

Vb.net 如何对衍生阵列使用冲突检测,vb.net,Vb.net,因为我一直在尝试制作一款太空入侵者风格的游戏,所以我在与阵列中生成的对象的碰撞检测方面遇到了麻烦(子弹也有点麻烦,它们不断停止并生成另一个)。我是一个新的编码,希望在这些问题上得到一些帮助,或者至少有一些链接到一些论坛,有相同的线程问题 这是我的密码: Public Class Form1 'global variables Dim intAmountOfEnemys As Short = 9 Dim intRowsOfEnemys As Integer = 0 '** Dim intAmoun

因为我一直在尝试制作一款太空入侵者风格的游戏,所以我在与阵列中生成的对象的碰撞检测方面遇到了麻烦(子弹也有点麻烦,它们不断停止并生成另一个)。我是一个新的编码,希望在这些问题上得到一些帮助,或者至少有一些链接到一些论坛,有相同的线程问题

这是我的密码:

Public Class Form1
'global variables
Dim intAmountOfEnemys As Short = 9
Dim intRowsOfEnemys As Integer = 0 '**
Dim intAmountOfBullets As Integer = 0
Dim picEnemysWave1(intAmountOfEnemys) As PictureBox
Dim lblBullets As New Label

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Welcome_Screen.Hide()
    Call EnemyWaves(picEnemysWave1)

End Sub

Sub PlayerMovement(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.A Then
        If picShip.Right <= 0 Then
            picShip.Left = 1567
        Else
            picShip.Left -= 10
        End If
    ElseIf e.KeyCode = Keys.D Then
        If picShip.Left >= 1567 Then
            picShip.Left = -15
        Else
            picShip.Left += 10
        End If
    ElseIf e.KeyCode = Keys.Space Then
        Do
            BulletGeneration(lblBullets)
        Loop Until Keys.Space
        lblBullets.Left = (picShip.Left + 7)
    End If
End Sub

#Region "Enemy waves, Movement, and Properties"

Sub EnemyWaves(ByRef picEnemysWave1() As PictureBox)
    'Enemy Generator
    Const srtENEMYSPACING_Y As Short = 155
    For intCounterForEnemys As Integer = 0 To intAmountOfEnemys
        Dim intEnemySpacing As Integer = srtENEMYSPACING_Y * intCounterForEnemys
        picEnemysWave1(intCounterForEnemys) = New PictureBox
        picEnemysWave1(intCounterForEnemys).Location = New Point(42 + intEnemySpacing, 1)
        picEnemysWave1(intCounterForEnemys).Image = My.Resources.enemy
        picEnemysWave1(intCounterForEnemys).Width = 124
        picEnemysWave1(intCounterForEnemys).Height = 84
        picEnemysWave1(intCounterForEnemys).Show()
        Me.Controls.Add(picEnemysWave1(intCounterForEnemys))
    Next intCounterForEnemys
End Sub``

Private Sub TmrAlien1_Tick(sender As Object, e As EventArgs) Handles TmrAlien1.Tick
    For intRandom As Integer = 0 To 9
        picEnemysWave1(intRandom).Top += 3
        Dim intRandomNum As Integer = Rnd()
        If intRandomNum > 0.66 Then
            picEnemysWave1(intRandom).Left += 2 'goes left randomly
        ElseIf intRandomNum < 0.33 Then
            picEnemysWave1(intRandom).Left -= 2 'goes right randomly
        End If

        If picEnemysWave1(intRandom).Top <= 0 Then
            TmrAlien1.Start()
        End If
        If picEnemysWave1(intRandom).Top >= 952 Then
            TmrAlien1.Stop()
        End If
    Next intRandom
End Sub

#End Region

#Region "Bullet Generation, Movement, and Properties"
Sub BulletGeneration(ByRef lblBullets As Object)
    'Generation of Bullets
    For intBulletCounter As Integer = 0 To intAmountOfBullets
        lblBullets = New Label
        lblBullets.location = New Point(760, 785)
        lblBullets.image = My.Resources.blast2
        lblBullets.width = 32
        lblBullets.height = 64
        lblBullets.show()
        Me.Controls.Add(lblBullets)
    Next intBulletCounter
End Sub

Private Sub tmrBullets_Tick(sender As Object, e As EventArgs) Handles tmrBullets.Tick
    lblBullets.Top -= 20
End Sub


#End Region

#Region "Collision Detection"
Sub BulletCollision(ByRef lblBullets As Label, ByRef intAmontOfEnemys As Integer)

    For Each picEnemy As PictureBox In picEnemysWave1
        If lblBullets.Bounds.IntersectsWith(picEnemy.Bounds) Then
            picEnemy.Location = New Point(3900, 8700)

            Exit For
        End If
    Next
    'what Im trying


End Sub

#End Region
公共类表单1
'全局变量
短时的发动机总功率=9
Dim INTROWSOFNEMES为整数=0'**
以整数表示的数据包数量=0
暗淡的PicenemySweev1(嵌入天线)如图片盒
作为新标签的Dim lblBullets
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
欢迎使用屏幕。隐藏()
调用EnemyWaves(PicenemyWave1)
端接头
Sub PlayerMovement(ByVal sender作为对象,ByVal e作为KeyEventArgs)处理MyBase.KeyDown
如果e.KeyCode=Keys.A,则
如果picShip.Right=1567,则
picShip.Left=-15
其他的
图片左+=10
如果结束
ElseIf e.KeyCode=Keys.Space然后
做
Bullet生成(lblBullets)
循环直到键。空格
lblBullets.Left=(picShip.Left+7)
如果结束
端接头
#区域“敌军波浪、移动和财产”
子EnemyWaves(ByRef PicenemyWave1()作为PictureBox)
"敌机",
常量srtenemispacking_Y作为短=155
对于intCounterForEnemys,整数=0到IntaMountofNemys
Dim INTENTEMYSPACING As Integer=srtENEMYSPACING_Y*intcounterforenemy
PicenemySweev1(intCounterForEnemys)=新图片盒
PicenemySweev1(intCounterForEnemys)。位置=新点(42+强度间隔,1)
PicenemySweev1(intCounterForEnemys).Image=My.Resources.敌军
picEnemysWave1(intCounterForEnemys)。宽度=124
picEnemysWave1(IntForeNemys)。高度=84
picenemysweev1(intCounterForEnemys).Show()
Me.Controls.Add(picenemysweev1(intCounterForEnemys))
下一个敌人
端接头``
私有子tmralien1u Tick(发送方作为对象,e作为事件参数)处理TmrAlien1.Tick
对于内部DOM,整数=0到9
PicenemySweev1(内部域)。顶部+=3
Dim intRandomNum As Integer=Rnd()
如果intRandomNum>0.66,则
PicenemySweev1(intRandom).Left+=2'随机向左移动
ElseIf intRandomNum<0.33则
PicenemySweev1(内部域)。左-=2'随机向右移动
如果结束
如果PicenemySweev1(intRandom).Top=952,则
TmrAlien1.Stop()
如果结束
下一个内部域
端接头
#末端区域
#区域“子弹的生成、移动和属性”
子Bullet生成(ByRef lblBullets作为对象)
"子弹的生成",
对于整数为0的intBulletCounter,可将其设置为整数
lblBullets=新标签
lblBullets.location=新点(760785)
lblBullets.image=My.Resources.blast2
lblBullets.width=32
lblBullets.height=64
lblBullets.show()
Me.Controls.Add(lblBullets)
下一个计数器
端接头
私有子tmrBullets\u Tick(发送方作为对象,e作为事件参数)处理tmrBullets.Tick
lblBullets.顶部-=20
端接头
#末端区域
#区域“碰撞检测”
子公告冲突(ByRef lblBullets作为标签,ByRef intamontofenemy作为整数)
在PicenemySweev1中以图片框的形式显示每一张图片
如果lblBullets.Bounds.IntersectsWith(PICENGINE.Bounds),则
位置=新点(39008700)
退出
如果结束
下一个
“我在试什么
端接头
#末端区域

到目前为止,你在谷歌上搜索了什么,因为我可以找到很多关于“2d碰撞检测”的热门文章。我搜索了如何使用2d碰撞检测,如何使用衍生数组的碰撞检测,以及许多其他类似的相关问题。我尝试了线程建议的所有代码,但都没有成功