关于游戏中的碰撞检测

2016-06-09 15:45:31 +08:00
 codecrash

2d 游戏,然后用 png 图片作为游戏素材,现在的方案是检测两个矩形重叠的部分,查看其中有没有黑色的像素点 但是这么做并不精确 https://i.imgur.com/GU3jeEt.png 会出现如图情况,明明没有撞到的因为右下角出现了黑块就认为相撞了,请问有什么好的解决方案来精确的确定两个物体是否相撞吗?

2666 次点击
所在节点    问与答
19 条回复
zmj1316
2016-06-09 16:38:23 +08:00
细分这个矩形,或者更彻底的搞个包围盒什么的?
wodesuck
2016-06-09 18:57:26 +08:00
不是很懂问题是什么……难道不是应该把图片右下角的黑块扣掉吗

碰撞检测一般就是八分树粗略找一下包围盒相交的,然后再细判
codecrash
2016-06-09 19:02:12 +08:00
@wodesuck 这是我检测到碰撞的图,也就是当前判定恐龙和右下角的那个黑块相撞了,然而事实上并没有
codecrash
2016-06-09 19:04:41 +08:00
@wodesuck 为什么要抠掉
wodesuck
2016-06-09 19:26:00 +08:00
@codecrash 所以你对“碰撞”的定义是什么
codecrash
2016-06-09 19:31:12 +08:00
@wodesuck 两个不规则的物体在平面上有相交的部分
wodesuck
2016-06-09 19:35:44 +08:00
@codecrash 那右下角那个黑块算不算物体的一部分呢,程序不能自己知道吧
xmbaozi
2016-06-09 19:40:11 +08:00
矩形直接根据坐标,长宽判断就好啦
codecrash
2016-06-09 19:43:49 +08:00
@xmbaozi 并不是简单的矩形,这个矩形并没有被全部占满,有一部分是透明的,也就是并不被物体占据,不应该简单将其处理为物体的一部分
codecrash
2016-06-09 19:48:24 +08:00
@zmj1316 可以稍微具体一点,或者有这方面的资料吗?
jerain
2016-06-09 19:56:20 +08:00
我用 cocos 的时候,这家公司的工具是很不错的
https://www.codeandweb.com
bingwenshi
2016-06-09 20:09:01 +08:00
如果是这个小龙的话,可以用圆形来判断吧? 肯定没法根据像素来判断啊,那计算量太重了
codecrash
2016-06-09 20:11:23 +08:00
@bingwenshi 怎么说?
likai
2016-06-09 20:12:45 +08:00
要精确。碰撞钢体最好用不规则的吧。直接一个圆形或者四方形都不那么精解确
ZyZyZzz
2016-06-09 20:15:50 +08:00
你这是要做像素级别的精细碰撞?
如果是的话,好奇为什么会有这种需求
codecrash
2016-06-09 20:16:29 +08:00
@likai 是不规则的呀,我希望的就是不规则的
zmj1316
2016-06-09 20:16:57 +08:00
@codecrash 你现在就是用一个大的矩形表示这个物体,所以导致了误差,你可以把这个物体用多个更小的矩形表示,比如做成一个倒 L 形上下两个矩形,最极限的方式就是一个像素点一个矩形,这样最精确但是开销也大
codecrash
2016-06-09 20:18:26 +08:00
@ZyZyZzz 因为想模仿 chrome 里面的那个小恐龙的游戏,但是不知道要怎么处理碰撞
ZyZyZzz
2016-06-09 20:23:01 +08:00
@codecrash 然而仔细看, chrome 的小恐龙游戏也没到逐像素级别的

如果非要逐像素,更建议仅对恐龙检测边缘的一圈像素是否进入了其他物体的包围盒

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX