codecrash
V2EX  ›  问与答

关于游戏中的碰撞检测

  •  
  •   codecrash · Jun 9, 2016 · 4060 views
    This topic created in 3803 days ago, the information mentioned may be changed or developed.

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

    19 replies  •  2016-06-09 20:23:01 +08:00
    zmj1316
    zmj1316
    Jun 9, 2016❤️1
    1
    细分这个矩形,或者更彻底的搞个包围盒什么的?
    wodesuck
    wodesuck
    Jun 9, 2016❤️1
    2
    不是很懂问题是什么……难道不是应该把图片右下角的黑块扣掉吗

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

    如果非要逐像素,更建议仅对恐龙检测边缘的一圈像素是否进入了其他物体的包围盒
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   690 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    ♥ Do have faith in what you're doing.