2012-11-07 14 views
1

使用KineticJS,我一直在嘗試創建一個只有一個圓形和四個矩形的組,但是單擊後,它會在它們周圍出現矩形(用於選項),並在下一次單擊時隱藏它們。他們已經創建好了(我認爲?),我可以達到我已經選擇矩形的地步,但是我需要使用Rect對象的setVisible()函數。子元素不能識別KineticJS中的函數?

 function makePlayer(xPos, yPos) { 
      var bufferSize = 15; 
      var player = new Kinetic.Group(); 
      var ball = new Kinetic.Circle({ 
       x: xPos, 
       y: yPos, 
       radius: 40, 
       fill: 'black', 
       stroke: 'black', 
       strokeWidth: 1 
      }); 
      player.add(ball); 
      ball.setAttr("menuShow", false); 


      for (var i = 0; i < 4; i++) { 
       var menuBox = new Kinetic.Rect({ 
        x: ball.getX(), 
        y: ball.getY(), 
        width: 50, 
        height: 50, 
        visible: false 
       }); 
       if (i == 0) { 
        menuBox.setFill('red'); 
        menuBox.setOffset(menuBox.getWidth()/2, ball.getHeight() + bufferSize); 
        menuBox.on("click tap", function() { alert("red box clicked/tapped") }); 
       } else if (i == 1) { 
        menuBox.setFill('blue'); 
        menuBox.setOffset(((ball.getWidth()/2) * -1) - bufferSize, menuBox.getHeight()/2); 
        menuBox.on("click tap", function() { alert("blue box clicked/tapped") }); 
       } else if (i == 2) { 
        menuBox.setFill('yellow'); 
        menuBox.setOffset(menuBox.getWidth()/2, ((ball.getHeight()/2) * -1) - bufferSize); 
        menuBox.on("click tap", function() { alert("yellow box clicked/tapped") }); 
       } else if (i == 3) { 
        menuBox.setFill('white'); 
        menuBox.setOffset(ball.getWidth() + bufferSize, menuBox.getHeight()/2); 
        menuBox.on("click tap", function() { alert("white box clicked/tapped") }); 
       } 
       menuBox.setAttr("menu", true); 
       player.add(menuBox); 
      } 
      ball.on("click tap", function() { 
       var menuPopup = ball.getAttrs(); 
       if (menuPopup.menuShow == false) { 
        for (var i = 1; i <= 4; i++) { 
         var menuBox = player.get('Rect'); 
         menuBox.setVisible(true); 
        } 
       } 
      }); 

圓正常產卵,但每當他們點擊代碼胡扯出來的調用setVisible,如前所述。

這是JavaScript錯誤我得到: 遺漏的類型錯誤:對象[對象對象],[目標對象],[目標對象],[目標對象]有沒有方法 '調用setVisible'

回答

1

我不知道kinectjs,但我不知道它是否可能與你添加和顯示菜單的方式有關。您不使用循環變量來標識特定的菜單。例如,您可能會將菜單框創建爲數組或名稱與數字連接。然後,在點擊/點擊處理程序循環中,您可能希望以相同方式引用各個菜單。

在再次查看它時,似乎player.get('Rect')行正在返回匹配項的數組。所以,我懷疑真正解決你的問題是忽略我的第一個段落,取而代之的是自來水處理程序的循環線更改爲以下:

menuBox[i-1].setVisible(true); 
+0

它的工作,它創造了一些意想不到的結果,但它的工作原理。感謝你的回答! – user1804748

+0

你應該接受這個答案,這是正確的。你正在迭代從1到4,並且每次都在你的數組上調用setVisible。嘗試在循環外部移動var menuBox = player.get('Rect'),並按照建議在循環中使用Pre101的片段。 –