我在一个类中有一个函数,它运行每个帧(在babylonjs中)。它的目的是加载 3D 图块并设置网格。
if (!mesh) {
// this.loadTile is async!
const newTile = this.loadTile(updatedTile)
if (newTile) {
this.tiles.add(tileKey, newTile)
}
} else {
// do some other magic
this.tiles.add(tileKey, updatedTile)
}
每个帧(或更新)我检查是否有该特定图块的网格。如果没有,它应该加载图块。加载它是异步的。现在 - 由于这是异步的,并且需要比一个更新周期更长的时间,因此它会过于频繁地运行 loadTile wayyyyy,因为它会检查!mesh。
这个想法是通过添加某种“待处理”来防止这种情况发生,如下所示: 添加一个具有“待处理”网格的图块,当异步 loadTile 完成时,它将替换“待处理”网格:
if (!mesh) {
this.tiles.add(tileKey, { updatedTile, mesh: new Mesh('pending') })
// this.loadTile is async!
this.loadTile(updatedTile).then((newTile) => {
if (newTile) {
this.tiles.add(tileKey, newTile)
}
})
} else if (mesh.name !== 'pending') {
// do some other magic
this.tiles.add(tileKey, updatedTile)
}
但由于某种原因它永远不会达到“else if”。 因为我在一个更新视口的函数内部,所以我无法使其异步。
有什么方法可以防止函数无休止地重复 loadTile ;) ?
非常感谢!
没关系...提供的解决方案有效。问题是我确实忘记了在这一行中传播更新的图块:
this.tiles.add(tileKey, { ...updatedTile, mesh: new Mesh('pending') })
所以这个对象是不正确的。
干杯!