|
|
发表于 2004-10-27 11:10:00
|
显示全部楼层
Re:如何实现碰撞监测
1.新建一个工程(Form1),
2.新建一个模块(Module1),
3.在Form1上画两个标签大小一样,(Label1,Label2),并使Label1位于Label2之上且当Label1下落时会碰到Label2,
4.创建一计时器(Timer1),
5.双击窗体输入:
Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 100
Label1.BackColor = QBColor(13)
Label2.BackColor = QBColor(10)
End Sub
Private Sub Form_Click()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim Label1Rect As RECT, Label2Rect As RECT, i As Integer
Label1.Top = Label1.Top + 50
Label1Rect = CreateRect(Label1.Left, Label1.Left + 标签1的width值, Label1.Top, Label1.Top + 标签1的height值)
Label2Rect = CreateRect(Label2.Left, Label2.Left + 标签2的width值, Label2.Top, Label2.Top + 标签2的height值)
If Collide(Label1Rect, Label2Rect) = True Then '如果撞到了
i = MsgBox("撞到了!") '添加撞到后的代码
End If
End Sub
6.在模块中输入:
'WindosAPI函数声明
'此函数为检测两个矩形区域是否相碰撞
Public Declare Function IntersectRect Lib "user32" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
'矩形区域的定义
Public Type RECT
Left As Long '矩形左上角的X坐标
Top As Long '矩形左上角的Y坐标
Right As Long '矩形左上角的(X+数值)构成矩形的长
Bottom As Long '矩形左上角的(Y+数值)构成矩形的高
End Type
'********碰撞引擎********'
'此函数为建立一个矩形区
Public Function CreateRect(X1 As Long, X2 As Long, Y1 As Long, Y2 As Long) As RECT
CreateRect.Left = X1 'X坐标
CreateRect.Right = X2 '长
CreateRect.Top = Y1 'Y坐标
CreateRect.Bottom = Y2 '高
End Function
'此函数为检测两个矩形区域是否相碰撞(使用上述声明的API函数)
'返回值为Boolean型:当返回值为True时两个矩形区域相碰撞,当返回值为False时两个矩形区域没碰撞
Public Function Collide(Rec1 As RECT, Rec2 As RECT) As Boolean
Dim EmptyRect As RECT
Collide = IntersectRect(EmptyRect, Rec1, Rec2) 'API函数
End Function
7.请在Timer1_Timer()过程中输入:标签1的width值,标签1的height值,标签2的width值,标签2的height值,
8.按F5看结果.
说明:此程序在Windows2000/VB6.0下通过.
|
|