首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

[D3D]怎样让一个物体在封闭路径内循环移动?解决办法

2012-05-12 
[D3D]怎样让一个物体在封闭路径内循环移动?我想让一个物体在一个封闭路径内循环移动,我是这样做的:D3DXVEC

[D3D]怎样让一个物体在封闭路径内循环移动?
我想让一个物体在一个封闭路径内循环移动,我是这样做的:

D3DXVECTOR3 PathPoints[10]; //定义路径上点的列表
D3DXVECTOR3 ObjPos , //物体的位置
  CurrentPos , //路径上当前点所在的位置
  NextPos; //路径上下一个点的位置
UINT CurrentNum , //路径上当前点的编号
  NextNum ; //下一个点的编号

CurrentNum = 0 ; //初始化第一个编号为0,即从第一个点开始移动
if ( CurrenNum < 9 ) NextNum = CurrentNum + 1 ; //计算下一个点  
else NextNum = 0 ;

ObjPos = PathPoints[0]; //物体位置初始化为路径上第一个点
CurrentPos = PathPoints[CurrentNum] ; //当前位置初始化为路径上第一个点
NextPos = PathPoints[NextNum] ; //下一个位置

D3DXVECTOR3 v0 = NextPos - CurrentPos ;
float d0 = D3DXVec3Length(&v0); //当前位置与下一个位置间的距离
D3DXVECTOR3 direct = v0 ; //计算移动的方向
D3DXVec3Normalize(&direct,&direct);

ObjPos += 0.001 * direct ; //移动物体

D3DXVECTOR3 v1 = NextPos - ObjPos ;  
float d1 = D3DXVec3Length(&v1);// 物体到一个位置间的距离


if( d0 - d1 < 0.1) //如果物体到下一个点的距离小于10厘米,即认为已经到达,更新编号
{
  if (CurrentNum < 9 ) CurrentNum += 1 ;
  else CurrentNum = 0 ;
}

运行的结果,物体总是似乎停留在最后一个点上,不会循环.
事实上,即使没有最后的if( d0 - d1 < 0.1)语句更新编号,程序依然运行.它运行的轨迹其实不是给定的路径,而是从第一个点以后开始逐点作近似螺旋线递减运动.
我检测过,最后的if( d0 - d1 < 0.1)语句执行了,但被前面的ObjPos = PathPoints[0]语句覆盖了;而NextNum = CurrentNum + 1语句每帧执行一次,改变前进方向.

我想我的思路错了,我对D3D程序还不够熟悉,不知正确的思路是什么,请大侠们指点一下.
多谢了!

[解决办法]
CurrentNum = 0 ; //初始化第一个编号为0,即从第一个点开始移动
if ( CurrenNum < 9 ) NextNum = CurrentNum + 1 ; //计算下一个点
else NextNum = 0 ;

这两句挨得这么近是在一个函数里吗?CurrentNum 也不是static的,那下面的if不就恒为真了?
不知道是否是这里的问题?


[解决办法]
建议lz看下《DirectX高级动画制作》第二章的内容,沿路径循环运动这部分说的听仔细的
[解决办法]
这个可以用路径动画做

热点排行