作者etrexetrex (ETREX)
看板GameDesign
标题Re: [问题]音速小子的行为模式
时间Sun Jun 4 15:54:08 2006
※ 引述《StubbornLin (Victor)》之铭言:
: ※ 引述《StubbornLin (Victor)》之铭言:
: : 判断目前的速度v在经过了一段很短的时间後的下一刻
: : 这段时间是Δt,在经过Δt的路线上
: : 是否会穿过某样物体,而这个Δt,就是上次更新和这次更新的时间差
: : 新的的座标位置
: : y = y + vy*Δt;
: : 新的速度
: : vy = vy + g*Δt;
: : 作法是,目前的座标,和下一刻的座标,两点间的连线
: : 看是否会交某个物件
: : 如果不会穿过某样物体,也就是没有碰撞,就让它继续往下掉
: : 如果会穿过某样物体,就要进行碰撞的运算
: : 这要看你的的球是否要给它弹性的特性,在这里我们假设它没有弹性
: : 也就是掉下去就不会再弹起来
: : 接着,你只要找出Δt内行进路线里,最先与物体接触的那点
: : 把球的位置设在那点上面,这样应该就OK了
: 修正一下,应该要这样说,碰撞到的那一点,的法向量,也就是
: 垂直於那个表面的方向,给与一个这颗球在这个法向量方向上面等同大小的反作用力
: 就可以抵消,简单的来讲,就是那个方向的速度归0
: 这样来做应该才比较正确,因为如果是x方向碰撞到,只有x方向的速度归0
: 而y还会继续往下掉
: ● 当撞到的一瞬间,速度在法线项量要抵消掉
: ↓
: ↑ 法线向量
: -----------------------------------
: 就算表面是斜的,一样也是法向量速度归0
这样会有另一个问题
我先只讲Y
dy是Y的速度
主时间轴
{
计算dy;
if(落地)
dy=0;
y+=dy;
}
问题是当地面平坦时
落地之後即使按↑键去影响dy
dy还是会被归零
因为他在移动之前是接触着地面的状态
囧
这让我不晓得怎麽作跳跃的功能
--
无名网志:
http://www.wretch.cc/blog/et284vu065k3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.125.108