游戏的 AS3 碰撞响应

Posted

技术标签:

【中文标题】游戏的 AS3 碰撞响应【英文标题】:AS3 Collision response for a game 【发布时间】:2011-06-22 02:50:08 【问题描述】:

我一直在努力解决碰撞响应方法,我用 actionscript 3 编写了很长时间,我希望有人能解释一下这段代码的含义,因为我只是修改了它.我不是从头开始写的。我也在使用碰撞检测工具包来查找发生碰撞的位置。 我想做的是让球(这是你用键盘在屏幕上移动的物体)击中墙壁或物体,它不会穿过墙壁或物体。

我对此的理解是,您正在找到发生碰撞的角度,然后您需要找到相邻的角度,即新向量并将对象推回它重叠的程度,但我不了解这个函数是如何工作的,例如什么是

vx0:Number = ball.vx * cos + ball.vy * sin;

发现?另外我不希望球加速我希望它的速度保持不变,直到它击中一个物体。向后搜索这个数组会更快吗?

-- 我感谢任何花时间尝试帮助我解决此问题的人,如果我有一些拼写错误,我深表歉意。

     for(i = 0; i < collisions.length; i++) 
        
            var collision:Object = collisions[i];

            var angle:Number = collision.angle;
            var overlap:int = collision.overlapping.length;
            var ball:Ball = collision.object1;

            var sin:Number = Math.sin(angle);
            var cos:Number = Math.cos(angle);

            var vx0:Number = ball.vx * cos + ball.vy * sin;
            var vy0:Number = ball.vy * cos - ball.vx * sin;

            vx0 = .4;
            ball.vx = vx0 * cos - vy0 * sin;
            ball.vy = vy0 * cos + vx0 * sin;

            ball.vx -= cos * overlap / ball.radius;
            ball.vy -= sin * overlap / ball.radius;
        

【问题讨论】:

如果您关心的是速度,那么 iterating backwards 可能不会快很多,甚至可能会稍微慢一些——您需要对您的具体情况进行基准测试以了解更多信息 非常感谢您的评论。我会记住这一点。 【参考方案1】:

Keith Peters 有一本很棒的书,名为 Foundation Actionscript 3.0 Animation: Making Things Move。

第 9 章涵盖了您遇到问题的主题。

这个页面应该特别有用。

http://books.google.ca/books?id=nzyu5TytMEUC&lpg=PP1&dq=actionscript%203.0%20animation&pg=PA235#v=onepage&q&f=false

他使用自制的三角碰撞测试,但您应该能够将他的距离检查替换为 Collision Detection Kit 中内置的功能和属性。

【讨论】:

+1 好书。另外,在那本书的续集中,有一章叫做“高级碰撞检测”可能会引起人们的兴趣:amazon.ca/AdvancED-ActionScript-Animation-Keith-Peters/dp/… 我最近都买了。几个月前,基思·彼得斯 (Keith Peters) 还是 FITC Edmonton 的特邀演讲者,他的工作非常出色。 非常感谢!这本书正是我要找的。我的问题解决了。也感谢您的快速响应。

以上是关于游戏的 AS3 碰撞响应的主要内容,如果未能解决你的问题,请参考以下文章

位图碰撞检测(AS3)

ActionScript 3 像素完美碰撞检测AS3

游戏开发中的物理介绍

Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题

android 游戏 碰撞检测

设置碰撞检测,然后在 2D 游戏中处理碰撞