Проблема с перемещением меша в Babylon.js

Я пытаюсь сделать игру в стиле Red Alert, просто для того, чтобы отточить свои навыки JS и получить базовые знания о разработке игр. Я пытаюсь переместить блочную сетку из одной части земли в другую. Тем не менее, он перемещает блок мгновенно, а не анимирует его.

Вот моя детская игровая площадка... http://www.babylonjs-playground.com/

Я думаю, что проблема с этим блоком кода...

  var moveUnit = function (position, item) { 
    if (position.x > 0) {
        while (item.position.x < position.x) {
            item.position.x += 0.001;
        }
    } else {
        while (item.position.x > position.x) {
            item.position.x -= 0.001;
        } 
    }

    if (position.z > 0) {
        while (item.position.z < position.z) {
            item.position.z += 0.001;
        }
    } else {
        while (item.position.z > position.z) {
            item.position.z -= 0.001;
        } 
    }
}

2 ответа

Решение
    while (item.position.x < position.x) {
        item.position.x += 0.001;
    }

Используя цикл while, вы обновляете позицию до конечной позиции с шагом в том же кадре игры. Это равносильно высказыванию:

item.position.x = position.x;

Из-за этого вы видите, как он перепрыгивает из своей начальной позиции в конечную позицию из одного кадра в другой; независимо от того, как вы обновляете позицию.

Если вы хотите смоделировать движение во времени, вам нужно перемещать объект с приращением к цели в течение нескольких кадров. Если приращения выбраны правильно, а кадры достаточно быстрые, это будет выглядеть как плавное движение.

Для этого у объектов должно быть некоторое представление о том, где они движутся по кадрам, и вам нужно ввести понятие времени в свою игру.

Взгляните на этот учебник для примера концепции.

BABYLON.js имеет встроенную функцию анимации, которая автоматически обрабатывает временные ограничения для мешей. Вот ссылка на рабочий пример!

http://www.babylonjs-playground.com/

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