Проблема с перемещением меша в 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 имеет встроенную функцию анимации, которая автоматически обрабатывает временные ограничения для мешей. Вот ссылка на рабочий пример!