📄 createbulletforedit.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 + -