游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2856|回复: 5

如何实现碰撞监测

[复制链接]

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2004-10-5 14:52:00 | 显示全部楼层 |阅读模式
如何实现碰撞监测
给我个小例子吧 [em10] [em10] [em10] [em10] [em10]

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2004-10-6 21:08:00 | 显示全部楼层

Re:如何实现碰撞监测

http://bbs.gameres.com/showthread.asp?threadid=2857

8

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 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下通过.

8

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2004-10-27 11:11:00 | 显示全部楼层

Re: 如何实现碰撞监测

附件:

sf_2004102711118.rar

3.1 KB, 下载次数:

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2004-10-27 18:34:00 | 显示全部楼层

Re:如何实现碰撞监测

嗯,还不错,一个最基本的碰撞检测程序,当然复杂的就是在这个上面发展起来的啦。

7

主题

87

帖子

109

积分

注册会员

Rank: 2

积分
109
QQ
发表于 2005-2-4 01:09:00 | 显示全部楼层

Re:如何实现碰撞监测

如果是3D就用空间盒。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 06:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表