Просто мои два цента за это -
Причина, по которой он отставал, заключается в том, что вы регистрировали прослушиватель щелчков после каждого рендеринга кадра. технически это означает, что каждую секунду регистрировалось 60 обратных вызовов. Поэтому, когда вы щелкнули через несколько секунд, сотни обратных вызовов были вызваны один за другим. Без удовольствия: -)
Ваше решение было правильным: зарегистрируйте щелчок хотя бы один раз и выполните создание ящика при нажатии.
Чтобы сэкономить немного времени, исделайте это «вавилонским способом», вместо этого вы можете сделать следующее:
scene.onPointerDown = function (evt, pickResult) {
// if the click hits
if (pickResult.hit) {
// do your thing here
createBlock(pickResult.pickedPoint);
}
};
function createBlock(pickedPosition) {
var box = BABYLON.MeshBuilder.CreateBox("box", { height: 3, width: 3, depth: 3 }, scene);
box.position.copyFrom(pickedPosition);
box.checkCollisions = true;
}
Таким образом, Babylon заботится о том, чтобы обрабатывать регистрацию событий для вас, так что события выбора и касания также регистрируются (а не только щелчки). ,Он также заботится об удалении слушателей событий, когда сцена удаляется.