Я экспериментировал с babylonjs, и до сих пор все отлично. Я могу загружать сетки и анимировать их просто отлично, когда все в функции обратного вызова ImportMesh в том же файле. Однако; когда я пытаюсь разделить вещи и сделать что-то простое, как показано ниже, я, кажется, получаю эти условия гонки. Возьмем следующий пример:babylonjs типография условия гонки?
var models = ["brick_wall", "tree1", "person1"]
for (var i =0;i<models.length;++i) {
BABYLON.SceneLoader.ImportMesh(models[i], "models/","tree.babylon", scene, (newMeshes) => {
this.meshMap[models[i]] = newMeshes[0]
console.log("mesh set:" + models[i])
});
}
Консольный журнал распечатывается как «сетка: неопределенный». Я предполагаю, потому что import mesh выполняет функцию обратного вызова в своем собственном потоке, прежде чем «i» даже успел установить? Однако у меня возникают проблемы с тем, чтобы узнать, как «i» и/или список моделей все еще не будут установлены, когда просто выполняете консольную печать в обратном вызове. Когда я делаю консольный отпечаток:
models[1]
в пределах одного обратного вызова, я могу видеть значение правильно? Не имеет смысла :(
Кто-нибудь знает, что происходит здесь с импортной сеткой в отношении потоков? Есть ли лучшие методы для babylonjs с ожиданием потоков? Я пробовал использовать scene.executewhenready, но я все еще не могу хранить и получить что-нибудь в переменной вне функции обратного вызова.
Спасибо. Это работает. Поэтому, если я правильно понимаю, это потому, что переменная «i» не является отдельной в области цикла for. Это больше похоже на ссылку, которая обновляется с каждым счетом? Поскольку javascript - это область действия функции, а не область скобок, вот почему работает функция funciton? Я действительно ценю решение, но есть ли «чистый» способ сделать это? – efel
выяснил более чистый способ сделать это с помощью моделей. Для каждого синтаксиса – efel