[Day 30] 再访碰撞侦测与解析(二) - 初步碰撞解析

今天只有研究一些相关的文章与做法,并没进行实作,所以单纯的纪录一下

今日目标

  • 角色移动不穿过其他物件

MISSION FAILED! 要解决的问题不是那麽简单!

虽说是今天是订这个目标,但是这个问题在每个游戏都很常见,例如: 好好地走在地图上,但是突然就被拉入虚空。这个就是碰撞解析(处理)的问题。今天则是把问题缩得更小,只用在2D平面,而且仅限矩形上。

回顾一下之前利用SAT做出来的碰撞,目的是要让角色站在地上,但是他却陷下去了!这个就可以带到上面说的走一走就掉入虚空的例子,後来参考Learn OpenGL - Collision Resolutiuon那一章节,这样的情况是来源於

假设角色每一帧都会往前一个单位,而这个单位很大会受delta time影响,那就有可能在这一帧算到的时候,就已经陷入其他物体内了,而且这件事低FPS会比高FPS的影响来的更大。

Learn OpenGL的解决作法是,碰撞时,算出陷进去多少向量,在把这个距离回减到碰撞物体上,这样在视觉上就可以是两个物体最终是互相卡住的状态。

然後,我在想,有没其他的作法,而且应该还是会有一些没考虑到的问题,毕竟Learn OpenGL里的范例,每个物体都是等大小的,我的2D Platfomer之後有许多不同大小的贴图话,可能就不是这麽简单了。

於是我在YT上找的这个教学影片,我认为是非常好教材

这部影片不只提到了上面说的帧数的问题,补充说道,如果是低FPS的设备,那就有可能当下这帧的时候,角色已经穿过并离开这个物体了,如果在进行校正,就会把原本的角色拉回到之前还没触碰到的位置。

重点是,这篇有一点一滴地从点>线>面开始解说并实作,但很不幸是英文的 ~o~

今天先这样,明天还会继续


<<:  DAY 25 - 野猪枪手 (1)

>>:  [day-25] Python-例外处理!

#1-连结Hover动起来!(CSS 伪元素)

网站必备!连结动态 连结的Hover动态算是网页动态最基本款, 一个好的动态绝对可以帮网页 点击率(...

【第八天 - Flutter Provider 架构教学】

前言 今日的程序码 => GIHUB 这篇,我要请求 https://jsonplacehol...

判断选取哪个radio button

var item = $('input:radio[name="radio_name&qu...

未来狂想:工业技术发展

人的科技文明发展始终来自於人性 伴随着整体世界的技术进步与科技的发展,人们的生活越来越便利且越来越舒...

Day15vue.js网站登出

延续昨日 我们今天先把 登出的功能给搞定 不然每次都要清除session不然就是要重开== 由於我们...