游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5261|回复: 14

关于两个图片碰撞判断的请教.

[复制链接]

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-7-12 10:35:00 | 显示全部楼层 |阅读模式
我需要的是能给出一个简单的例子或API用法,比如我有两个图片,BITBLT1,BITBLT2,

假如一个是我的飞机,一个是敌人的飞机,如何去判断我的飞机与敌人的飞机两个图片相交?有API的例子更好,谢谢!

因为目前我做的打击者1940游戏判断敌人被炮弹击中或自己被击中等用的都是循环检测每个点,很费电脑运行资源,射击游戏里敌人一多就很慢,我现在同屏一次出现的飞机最多只有5架,感觉游戏在慢的电脑上运行不流畅,我一但减少循环就快很多所以请大家帮忙,现在游戏里用的程序都是老方法。

我会做出更好的游戏奉献给大家。
----------------------------------------------------------------------
找到一个,但不知道怎么用?

Function IsCollision(ByVal Obj1 As Object, ByVal Obj2 As Object) As Boolean

If (Obj1.Left >= Obj2.Left And Obj1.Left <= Obj2.Left + Obj2.Width Or Obj1.Left + Obj1.Width >= Obj2.Left And Obj1.Left + Obj1.Width <= Obj2.Left + Obj2.Width) And (Obj1.Top >= Obj2.Top And Obj1.Top <= Obj2.Top + Obj2.Height Or Obj1.Top + Obj1.Height >= Obj2.Top And Obj1.Top + Obj1.Height <= Obj2.Top + Obj2.Height) Then IsCollision = True

End Function

使用方法

If IsCollision(Image1, Image2) Then







sf_2005712103514.jpg

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
 楼主| 发表于 2005-7-12 14:06:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

在VB6下无法使用这个API, 会显示用户定义类型未定义, 请指教

Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-12 14:18:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

定义上面的类型

另外,2个与坐标轴平行的矩形是否相交,我总结的规律:大于大的小于小的

就是说如果一个矩形的最大的坐标比另一个最小的坐标还小就不相交,反过来如果一个矩形的最小的坐标比另一个最大的坐标还大就不相交

If Rc1.Left > Rc2.Right Or Rc1.Right < Rc2.Left Or Rc1.Top > Rc2.Bottom Or Rc1.Bottom < Rc2.Top Then bRet = False

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-12 14:34:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

如果是VB.NET,尽量使用短路运算符OrElse,可以减少判断的次数,尤其是对于游戏,每秒判断上百次,节省的时间还是很可观的。

11

主题

71

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2005-7-12 14:37:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

值得学习。

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
 楼主| 发表于 2005-7-12 17:04:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

先谢谢楼上的bigbook2000朋友,不过我还是用不到, 我水平很菜.
我找到另外一种方法: 不用再循环检测每个点了.......
XX = 200: YY = 390                 ' 炮弹坐标   
A = 200: B = 300                    ' 飞机坐标
'画炮弹
BitBlt Me.hDC, XX, YY, B1.Width, B1.Height, B1.hDC, 0, 0, MERGEPAINT
BitBlt Me.hDC, XX, YY, B2.Width, B2.Height, B2.hDC, 0, 0, SRCAND
'画飞机(假设飞机的尺寸是50 X 50 点)
BitBlt Me.hDC, A, B, MYFLY1.Width, MYFLY1.Height, MYFLY1.hDC, 0, 0, MERGEPAINT
BitBlt Me.hDC, A, B, MYFLY2.Width, MYFLY2.Height, MYFLY2.hDC, 0, 0, SRCAND
' 就是用下面这句判断飞机是否中弹, 然实际应用的时候可以用数组.
If XX > A And XX < A + 50 And YY > B And YY < B + 50 Then  BOMB '(到爆炸程序)

如果bigbook2000有你说的实际的例子就好了,确因为我看到的一些其他的游戏都没有用到这个函数.

1

主题

50

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2005-7-17 17:19:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

想不到在这也能看到游戏之家!路过路过!

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
 楼主| 发表于 2005-7-17 21:38:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

我新来的,想学东西。

53

主题

419

帖子

451

积分

中级会员

Rank: 3Rank: 3

积分
451
发表于 2005-7-20 11:12:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.

可以把两个物体看成两个矩形 A和B

只要矩形 B的四个顶点任何一个在矩形 A的里面,就说明两个矩形相交

很简单

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-20 13:40:00 | 显示全部楼层

Re: 关于两个图片碰撞判断的请教.


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 07:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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