如何优化网格的创建?

时间:2019-10-15 16:48:27

标签: babylonjs

我添加了一项功能,可让您在单击地面时创建网格。但是由于某种原因,当我走近网格时,浏览器滞后很多。创建场景时生成的网格不会发生这种情况。

这是我创建对象的方式

scene.registerBeforeRender(function () {
            window.addEventListener("click", function (evt) {
                var pickResult = scene.pick(evt.clientX, evt.clientY, evt.clientZ);
                if (pickResult.hit) {

                    createBlock(pickResult.pickedPoint.x, pickResult.pickedPoint.y, pickResult.pickedPoint.z);

                }
            });

        });

function createBlock(x, y, z) {
        var box = BABYLON.MeshBuilder.CreateBox("box", { height: 3, width: 3, depth: 3 }, scene);
        box.position.x = x;
        box.position.y = y + 1;
        box.position.z = z;
        box.checkCollisions = true;
    }

我相信这与onClick事件有关,因为我在keyPush事件上尝试了相同的方法,并且效果很好

2 个答案:

答案 0 :(得分:0)

我刚刚发现了。我删除了

scene.registerBeforeRender(function () {

现在工作正常

答案 1 :(得分:0)

为此我只需两美分-

它滞后的原因是因为您在渲染的每一帧之后都注册了一个点击侦听器。从技术上讲,这意味着每秒注册60个回调。因此,当您在几秒钟后单击时,一个又一个地调用了数百个回调。不好玩:-)

您的解决方案是正确的选择-即使单击一次也可以单击一次,并在单击时执行框的创建。

要节省一些工作并以“巴比伦方式”进行操作,您可以改为:

var

这样,巴比伦会为您处理事件注册,因此拾取和触摸事件也会被注册(不仅是单击)。处理场景时,它还需要删除事件侦听器。