WebGL怎么让多个Entity一起移动? [已关闭]

0 投票

目前使用方法:

1、先使用new Cesium.DrawHandler绘制点的同时绘制线路,并保存Entity和线,合成数组[{"model":Entity,"entityLine":entityLine}];

2、在for循环中使用viewer.clock管理并使Entity进行移动,如图

出现问题:for循环中停止时间是以最后一条线路的长度为准,如果第一条线路比第二条线路长,那么两个同时移动时,第二条到达终点,第一条停在了半路。

请问有没有其他办法解决这个问题?

问题关闭原因: 已经解决
12月 4, 2020 分类:  244次浏览 | 用户: webit 才疏学浅 (15 分)
已关闭 12月 18, 2020 用户:webit

1个回答

0 投票
在for循环里面写一个排序,将最长线路的值赋给length
12月 4, 2020 用户: 卷饼先生 登峰造极 (5,432 分)
这样不行的,虽然最长的可以跑完,但是短的他也继续跑了。

关键点应该在

viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();

这个,就是不知道怎么让他循坏控制每一个实体

function computeCirclularFlight(line,start,stop) {
                var length = line._actualPositions.length;
                var property = new Cesium.SampledPositionProperty();
                var point = [];
                  var sum = 0;
                for (var i = 0; i < length; i ++) {
                    var position = line._actualPositions[i];
                    if(i > 0){
                        var prepostion = line._actualPositions[i-1];
                        var distance = Cesium.Cartesian3.distance(position, prepostion);
                    }
                    sum += distance || 0;
                    var time = Cesium.JulianDate.addSeconds(start, sum/20, new Cesium.JulianDate());
                    if(i === length - 1){
                        viewer.clock.stopTime = time;
                    }
                    property.addSample(time, position);
                }
                return property;
            }
...