这篇文章主要介绍“js怎么实现沿线的onframe行走”,在日常操作中,相信很多人在js怎么实现沿线的onframe行走问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js怎么实现沿线的onframe行走”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
下边列举一个在实际中的应用,如何沿着一条做好的线,在线上动态的移动一个模型文件。
以下是具体的js代码:
//一个通用函数,如何把te中geometry的点类型,转换成position位置
function pointToPostion(point,altitudeType)
{
var postionl=SGWorld.Creator.CreatePosition(point.X,point.Y,point.Z,altitudeType,0,0,0,0);
return postionl;
}
//定义行走的模型,时间等参数
var model = null;
var time;
var linePointCount=0;
var i;
var altitudeType;
var linePoint;
function Init()
{
i=0;
//找到事先画好的线对象
var item = SGWorld.ProjectTree.FindItem("线\\路径");
var poly = SGWorld.ProjectTree.GetObject(item);
//获得线对象的geometry和高度类型,线中包含的点
var polygonGeometry = poly.Geometry;
altitudeType=poly.Position.AltitudeType;
linePoint= polygonGeometry.Points;
linePointCount=polygonGeometry.Points.Count;
var fpos=pointToPostion(linePoint.Item(i),altitudeType);
//初始化时间和onframe事件
time = new Date();
SGWorld.AttachEvent("onFrame", onFrame); //新建一个行走的模型
model = SGWorld.Creator.CreateModel(fpos, "D:\\skylinedata\\小人.xpl", 3);
}
//onframe时间实现,这是代码的关键
function onFrame()
{
//按照线中的点进行行走,从第一个点到最后一个,当大于点数,路径走 完
if(i<linePointCount-1)
{
//取当前点和后一个点,计算距离,起点指向终点的角度
var fpos=pointToPostion(linePoint.Item(i),altitudeType);
var spos=pointToPostion(linePoint.Item(i+1),altitudeType);
var distance=fpos.DistanceTo(spos);
var aimTo=fpos.AimTo(spos);
//计算onframe执行一次的时间,对象行走的距离
var distToMove = (30 * 1000 / 3600) * (new Date().getTime() - time.getTime()) / 1000;
//计算当前距离是否超高当前线段距离,如超过则切换线中下一个点
var nowDis=fpos.DistanceTo(model.Position);
if(nowDis<distance)
{
//设置模型的位置
model.Position = model.Position.Move(distToMove, aimTo.Yaw, aimTo.Pitch);
model.Position.Pitch=0;
}
else
{
//切换下一个点
model.Position = spos;
i++;
}
time = new Date();
}
else
{
SGWorld.DetachEvent("onFrame", onFrame);
}
}
到此,关于“js怎么实现沿线的onframe行走”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。