Обновление свойства обратного вызова Cesium заставляет объект мигать

Вот некоторый код, который можно вставить в замок с цезиевым песком.

Он добавляет объект на карту, затем каждую секунду обновляет CallbackProperty для свойства position. Каждый раз, когда он обновляется, объект мигает.

var viewer = new Cesium.Viewer('cesiumContainer');
var position = new Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0);
var constant = false;
var blueBox = viewer.entities.add({
    name : 'Blue box',
    position: new Cesium.CallbackProperty(getPos, constant),
    box : {
        dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material : Cesium.Color.BLUE
    }
});

function getPos() {
    return position;
}

function setPosCallback() {
    constant = !constant;
    blueBox.position.setCallback(getPos, constant);
}

setInterval(setPosCallback, 1000);

Есть ли способ обновить этот тип свойства, не заставляя сущность мигать? Может быть, используя requestAnimationFrame или что-то?

Мне нужно использовать callbackProperties для рисования фигур, но как только они будут нарисованы, я хочу, чтобы они использовали постоянные свойства. Я также попытался изменить свойство isConstant, но оно доступно только для чтения.

2 ответа

Я понимаю, что этот вопрос был задан очень давно, но похоже, что проблема в этой строке «constant =! Constant;». Простое удаление этого устранит мерцание.

var viewer = new Cesium.Viewer('cesiumContainer');
var position = new Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0);
var constant = true;
var blueBox = viewer.entities.add({
    name : 'Blue box',
    position: new Cesium.CallbackProperty(getPos, constant),
    box : {
        dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material : Cesium.Color.BLUE
    }
});

var count = -114.0;
function getPos() {
count+=0.2;
    return new Cesium.Cartesian3.fromDegrees(count, 40.0, 300000.0);
}

function setPosCallback() {
    constant = !constant;
    blueBox.position.setCallback(getPos.bind(blueBox), true);
}

setInterval(setPosCallback, 1000);

Привет, коробка движется, и она не вспыхнула в моем браузере, когда я связал функцию обратного вызова с сущностью и сохранил константу = true.

Вы можете попробовать еще раз. ура

Другие вопросы по тегам