CesiumCallbackProperty无效

Cesium的CallbackProperty有回调功能,凡是属性是Property的类型的均可以使用Property,这里一定得注意必须是Property类型,像什么PositionProperty、MaterialProperty这些最好不要用,要不然结果很可能不是你期望的。
那好,既然有回调功能,如下代码应该不断打印1111才对。

var callback = new Cesium.CallbackProperty(function() {
    console.log(11111);
    return new GeoPosition(113,25,80).toCartesian();
},false);

可事实是没有。记得曾经研究过CallbackProperty的实现机制,看了CallbackProperty源码,没看出个所以然。它的神奇之处在于,return 那个地方,返回什么类型,那个callback就是什么类型。这一点一直没明白。今天遇到这个问题,让我再次研究为什么他不起作用,仔细对比我之前的使用,发现后面都要把这个东西赋值给Entity,难道是这里的问题?就在那一瞬间我明白了,其实CallbackProperty并没有回调的功能,之所以出现回调,一定是系统内部在不断调用,这时候就可以获取CallbackProperty里的函数,进而获取到返回值。根本不是我前面写的那样。写到这里,我忽然觉得我之前对回调的理解是错误的,谁说回调就是创建之后不断调用。回调是让别人不断调用,不是自己。那所以如下代码应该能如我所愿了。

var callback = new Cesium.CallbackProperty(function() {
    console.log(11111);
    return new GeoPosition(113,25,80).toCartesian();
},false);
var viewer = mainControl.viewer;
var en = new Cesium.Entity({
    position : callback,//注意这里我用了CallbackProperty,只是为了验证是否进行了回调。
});
viewer.entities.add(en);

果不其然,还是没出来。。。。那这样呢

var callback = new Cesium.CallbackProperty(function() {
    console.log(11111);
    return new GeoPosition(113,25,80).toCartesian();
},false);
var viewer = mainControl.viewer;
var en = new Cesium.Entity({
    position : callback,
    box :{
        dimensions : new Cesium.Cartesian3(5000,5000,5000)
    }
});
viewer.entities.add(en);

出来了,好吧,必须得为Entity的Graphics属性赋值。。。

开源GIS视频教程点这里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值