首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人群/僵尸群碰撞

人群/僵尸群碰撞
EN

Stack Overflow用户
提问于 2016-11-06 16:39:47
回答 1查看 154关注 0票数 0

因此,我试图重新制作一个闪光灯游戏,我制作了大约一年前,但在love2D。我已经到了基本完成的地步,所以我决定去修理一些东西。

第一件事是,我在旋转的对象上使用了一个普通的AABB碰撞检测,有时子弹会直接穿过僵尸(我用roblox中的2D碰撞教程go图修正了这个问题)。

第二件事是,我希望僵尸在碰撞时“推开”对方,而不是相互融合。

我用于旋转2D碰撞的教程还展示了如何在物体碰撞时将物体彼此移开。

每个僵尸都存储在一个表中,然后我循环遍历这些表来处理它们(比如画它们、更新等等。僵尸是通过另一个类创建的)

但由于它们在同一张桌子上,我不太确定如何确保它们相互碰撞。

代码语言:javascript
复制
for izom,zom in ipairs(main.zombies) do
    zom:update(dt)
    doesCollide,mtv = collide(zom,zom)
    if collide(zom,zom) then
        zom.Position = zom.Position + Vector2.new(mtv.x, mtv.y);;
    end
end

我试过了,但没用。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 00:51:34

我会使用嵌套的for循环,就像Dimitry说的那样。

至于推开,我会检查两个僵尸中心点之间的距离是否小于僵尸的全部宽度,如果是的话,那么推开。

它看起来会像这样

代码语言:javascript
复制
    local pushBack=50 --How hard they should push away from eachother

    --Loop through the zombies table twice
    for ia,zombiea in ipairs(main.zombies) do
      for ib,zombieb in ipairs(main.zombies) do

         --Get the distance between the two zombies
         local dx = zombiea.x - zombieb.x
         local dy = zombiea.y - zombieb.y
         distance = math.sqrt ( dx * dx + dy * dy )

         --If the zombies are touching
         if distance<zombiea.width then
            local angle=math.atan2((zombieb.y-zombiea.y),(zombieb.x-zombiea.x))

            --Push zombie A
            zombiea.x=zombiea.x+math.cos(angle)*pushBack*dt
            zombiea.y=zombiea.y+math.sin(angle)*pushBack*dt

            --Push zombie B
            zombiea.x=zombiea.x+math.cos(angle)*pushBack*dt
            zombiea.y=zombiea.y+math.sin(angle)*pushBack*dt

         end
      end
    end

您可能需要在最终的距离计算中添加一个+ math.pi才能得到正确的方向。

distance = math.sqrt ( dx * dx + dy * dy ) + math.pi

另外,您可能希望pushBack变量动态地更改,这取决于它们之间的距离有多近才能给它一个更流畅的感觉。

我也不知道你是如何处理僵尸的移动,但希望这仍然会有帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40451799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档