【问题标题】:Press the same key to do different actions按同一个键做不同的动作
【发布时间】:2021-01-22 02:28:17
【问题描述】:

我想按字母“L”删除一些东西,然后再次按“L”添加我删除的东西。 我可以用这段代码做删除的部分:

  document.addEventListener("keydown", onDocumentKeyDown, false);

    function onDocumentKeyDown(event) {
        // Get the key code of the pressed key 
        var keyCode = event.which;
        console.log("l" + keyCode);
        if (keyCode == 76) {
            scene.remove(directionalLight);
        }

        render();
    }

我试过了:

    else if (keyCode == 76) {
        scene.add(directionalLight);
    }

但这显然行不通。

那么我怎样才能按相同的键来执行“scene.add(directionalLight);” ?

【问题讨论】:

  • 所以保持动作状态
  • 只要检查灯是否已经存在,例如scene.getObjectByName() ? remove : add

标签: javascript html three.js


【解决方案1】:

试试这样的:

//use a variable to keep track of if the directional light exists
bool light = true;

document.addEventListener("keydown", onDocumentKeyDown, false);

    function onDocumentKeyDown(event) {
        // Get the key code of the pressed key 
        var keyCode = event.which;
        console.log("l" + keyCode);
        if (keyCode == 76) {
            //check the status of the variable to decide what to do, 
            //and update its status
            if (light) {
                scene.remove(directionalLight);
                light = false;
            } else {
                scene.add(directionalLight);
                light = true;
            }
        }

        render();
    }

这是一种在两种行为之间交替的非常简单的策略。

【讨论】:

    【解决方案2】:

    您需要另一个条件来检查场景是否已添加。我不熟悉three.js,所以我不知道是否有一个变量可以像scene.isAdded 一样检查,但你可以创建自己的。我在下面的代码中创建了一个名为isAdded 的变量:

    document.addEventListener("keydown", onDocumentKeyDown, false);
    
    let isAdded = true; // define the variable outside of the function
    
    function onDocumentKeyDown(event) {
        // Get the key code of the pressed key 
        var keyCode = event.which;
        console.log("l" + keyCode);
        if (keyCode == 76) {
            if (isAdded) {
                console.log('remove');
                scene.remove(directionalLight);
            } else {
                console.log('add');
                scene.add(directionalLight);
            }
            isAdded = !isAdded ; // toggle the isAdded variable
        }
    
        render();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多