⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createbulletforedit.bas

📁 一款飞机射击游戏的源代码
💻 BAS
字号:
Attribute VB_Name = "ModCreateBullet"
Option Explicit
Public PlayBul() As RunBullet

'''''产生一般的类型
Public Sub CreateBullet(ByVal BulStartX As Single, ByVal BulStartY As Single)  ', ByVal IsObjRotate As Boolean, ByVal TypeMove As Byte)
    Dim IndexBul As Byte
    Dim InitSpeed As Single
    Dim CountF As Byte
        For IndexBul = 1 To 50 '如果把for next放到里面,虽速度更快,但比较烦琐
                If PlayBul(IndexBul).IndexR = 0 Then
                    InitSpeed = CSng(EditBul.SpeedInit)
                    InitSpeed = IIf((EditBul.SpeedInit = 0), Rnd * 2 + 3, InitSpeed)
                        With PlayBul(IndexBul)
                            .CurX = BulStartX - EditBul.Width / 2
                            .CurY = BulStartY - EditBul.Height / 2
                            .IndexR = 1      '******************
                            .IsRotate = EditBul.IsRotate
                            .CurDelay = 0
                                Select Case EditBul.TypeMove  'TypeBul
                                    Case 0
                                        .CurSpeedX = 0
                                        .CurSpeedY = InitSpeed
                                        Exit For
                                    Case 1
                                        .CurSpeedX = InitSpeed * (CountF - 1) / 2
                                        .CurSpeedY = InitSpeed
                                        If CountF = 2 Then Exit For
                                        CountF = CountF + 2
                                    Case 2
                                        .CurSpeedX = InitSpeed * (CountF - 1) / 2
                                        .CurSpeedY = InitSpeed
                                        If CountF = 2 Then Exit For
                                        CountF = CountF + 1
                                    Case 3
                                        .CurSpeedX = InitSpeed * Cos(CF(CountF * 30))
                                        .CurSpeedY = InitSpeed * Sin(CF(CountF * 30))
                                        If CountF = 11 Then Exit For
                                        CountF = CountF + 1
                                    Case 4
                                        .CurSpeedX = InitSpeed * Cos(CF(CountF * 18 - 9))
                                        .CurSpeedY = InitSpeed * Sin(CF(CountF * 18 - 9))
                                        CountF = CountF + 1
                                        If CountF = 20 Then Exit For
                                    Case 5
                                        .CurSpeedX = InitSpeed * Cos(CF(CountF * 18 - 9))
                                        .CurSpeedY = InitSpeed * Sin(CF(CountF * 18 - 9))
                                        If CountF Mod 2 = 0 Then
                                            .CurSpeedX = .CurSpeedX * 1.2
                                            .CurSpeedY = .CurSpeedY * 1.2
                                        End If
                                        CountF = CountF + 1
                                        If CountF = 20 Then Exit For
                                    Case 6
                                        .CurSpeedX = InitSpeed * Tan(CF(CountF * 8 - 32))
                                        .CurSpeedY = InitSpeed
                                        CountF = CountF + 1
                                        If CountF = 9 Then Exit For
                                    Case 7
                                        .CurSpeedX = InitSpeed * Cos(CF(CountF * 8 + 58))
                                        .CurSpeedY = InitSpeed * Sin(CF(CountF * 8 + 58))
                                        CountF = CountF + 1
                                        If CountF = 9 Then Exit For
                                    Case Is >= 8
                                        .CurSpeedX = 0
                                        .CurSpeedY = InitSpeed * (1 + CountF / 2)
                                        CountF = CountF + 1
                                        If CountF = 6 Then Exit For

                                End Select
                        End With
                End If
        Next IndexBul
        '后面可能还有,所以用exit for
End Sub
'''产生旋转的类型
Public Sub CreateRotateBullet(ByVal FireType As Integer, ByVal FireSeatX0 As Single, ByVal FireSeatY0 As Single)
    Dim IndexBul As Byte
    Dim InitSpeed As Single
    Dim ErrX As Single
    Dim ErrY As Single
    For IndexBul = 1 To 100
        If PlayBul(IndexBul).IndexR = 0 Then
            InitSpeed = CSng(EditBul.SpeedInit)
            InitSpeed = IIf((EditBul.SpeedInit = 0), Rnd * 2 + 3, InitSpeed)
            ErrX = CurMouseX - FireSeatX0
            ErrY = CurMouseY - FireSeatY0
            With PlayBul(IndexBul)
                .CurX = FireSeatX0 - EditBul.Width / 2
                .CurY = FireSeatY0 - EditBul.Height / 2
                .IndexR = FireType
                .CurDelay = 0
                .IsRotate = EditBul.IsRotate
                If ErrY = 0 Then
                    .CurSpeedX = InitSpeed * Sgn(ErrX)
                    .CurSpeedY = 0
                ElseIf Abs(ErrX / ErrY) > 0.1 And Abs(ErrX / ErrY) < 10 Then
                    .CurSpeedX = InitSpeed * ErrX / Sqr(ErrX ^ 2 + ErrY ^ 2)
                    .CurSpeedY = .CurSpeedX * ErrX / ErrY
                ElseIf Abs(ErrX) > Abs(ErrY) Then
                    .CurSpeedY = 0
                    .CurSpeedY = InitSpeed * Sgn(ErrX)
                Else
                    .CurSpeedX = 0
                    .CurSpeedY = InitSpeed * Sgn(ErrX)
                End If
            End With
            Exit For
        End If
    Next IndexBul
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -