作者StubbornLin (Victor)
看板GameDesign
标题Re: [问题]音速小子的行为模式
时间Sun Jun 4 17:24:15 2006
※ 引述《etrexetrex (ETREX)》之铭言:
: ※ 引述《StubbornLin (Victor)》之铭言:
: 这样会有另一个问题
: 我先只讲Y
: dy是Y的速度
: 主时间轴
: {
: 计算dy;
: if(落地)
: dy=0;
: y+=dy;
: }
: 问题是当地面平坦时
: 落地之後即使按↑键去影响dy
: dy还是会被归零
: 因为他在移动之前是接触着地面的状态
: 囧
: 这让我不晓得怎麽作跳跃的功能
主时间轴
{
vy += g*dt; // 速度 加上重力加速度
dy = vy*dt; // 这是在上次更新到这次更新的时间内,y应该要做的位移
y += dy; // 将y的位置做移动 其实可以合在一起写= ="
if(与水平面碰撞){
vy = 0; // y方向的速度归0
y = 0; // 把y的位置归到碰撞後应该所在的位置 不一定是0
if(跳跃){
vy += a; // 速度 加上 加速度
}
}
}
这样一来,当目前球是与地面接触,这时球会一直想要往下掉
但是因为一直与水平面碰撞,因此vy一直都是0,y也都是0
当玩家想往上跳,vy会加上一个起跳的加速度
这个加速度越大,就跳越高,当然这个速度不能太小
有了这个往上跳的速度,第二次执行这个回圈时
因为球不在是往下掉,因此就不会有碰撞的问题
然而重力会不停的把球往下拉...往下拉
因此在执行到後来的回圈里,vy这个速度,原本从
向上 很大 -> 向上大 -> 向上中 -> 向上小 -> 0 - > 向下很小 -> 向下中....
这样就是整个物体运动的过程
以上理论应该没有问题,不过我还没实作,晚上有空的话
写个小程式来实作看看
--
VICTOR工作室 |
PTT游戏设计版隆重开幕!
|
不管是新手老手,程式美工音乐企划....
URL :
http://www.kinmen.info/vic/ |
都欢迎来游戏设计版参与讨论 XD
|
战略高手>
C/C++ |
GameTopics>
Visual Basic 6.0 |
GameDesign
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.116.65.9