温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

js怎么实现沿线的onframe行走

发布时间:2021-12-29 10:04:32 来源:亿速云 阅读:169 作者:iii 栏目:大数据

这篇文章主要介绍“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行走”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js
AI