如何在生成的数组中使用碰撞检测

时间:2018-06-18 04:28:37

标签: vb.net

由于我一直试图制作一个太空入侵者风格的游戏,我一直遇到与阵列中产生的对象进行碰撞检测的问题(并且子弹有点麻烦,它们会一直停止并有另一个生成)。我是编码新手,希望对这些问题提供一些帮助,或者至少有一些链接到一些具有相同线程问题的论坛。

这是我的代码:

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

0 个答案:

没有答案