2016-06-22 54 views
0

我想應用存儲在陣列到我的對象時,按下鍵的顏色,但由於某些原因IM能的keyPressed時,爲了獲得陣列的只有第一個元素。請讓我知道是否有其他方式來做到這一點。問題與改變的按鍵對象的材料three.js所

我試圖隨機顏色的功能,但我的要求並不包括應用顏色隨機。

var onKeyDown = function(event) { 

    if (event.keyCode == 67) { // when 'c' is pressed 
           var index=0;  

           object.traverse(function(child) { if (child instanceof THREE.Mesh) { 

             if (child.material.name == "Leather") { 
              var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue 
              if(index == colors.length) index = 0; 
              child.material.color.setHex(colors[index++]); 
              child.material.needsUpdate=true; 
              child.geometry.buffersNeedUpdate = true; 
              child.geometry.uvsNeedUpdate = true; 

             } 
             }}); 

          } }; 
           document.addEventListener('keydown', onKeyDown, true); 

回答

1

您的變量'index'位於函數的局部範圍內。所以每次按C鍵時它都會被初始化(var index = 0;)。

你只需要移動該變量函數外,一切都會好起來的。

var index=0, 
onKeyDown = function(event) { 
    if (event.keyCode == 67) { // when 'c' is pressed 
     object.traverse(function(child) { 
      if (child instanceof THREE.Mesh) { 
       if (child.material.name == "Leather") { 
        var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue 
        if(index == colors.length) index = 0; 
        child.material.color.setHex(colors[index++]); 
        child.material.needsUpdate=true; 
        child.geometry.buffersNeedUpdate = true; 
        child.geometry.uvsNeedUpdate = true; 
       } 
      } 
     }); 
    } 
}; 

document.addEventListener('keydown', onKeyDown, true); 
+0

感謝您的,IM也試圖通過陣列調用等[白,硅]預定義的變量,但是當我在如果條件稱它們上按壓「C」的更改不會反映。對此有何想法?https://jsfiddle.net/304ub2t7/ –