V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
codecrash
V2EX  ›  问与答

关于游戏中的碰撞检测

  •  
  •   codecrash · 2016-06-09 15:45:31 +08:00 · 2856 次点击
    这是一个创建于 3118 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    如果非要逐像素,更建议仅对恐龙检测边缘的一圈像素是否进入了其他物体的包围盒
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2617 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.