2013-03-30 104 views
0

我正在使用KineticJS,但是当我尝试删除舞台上的一个图层上的两个组件(一个Kinetic.Image实例和一个Kinetic.Text实例)时,我得到未捕获的typerror,即使我把我的代码放在try catch块中。未捕获的TypeError:无法调用未定义的方法'getLayer'

什么是导致错误?

这是相关代码

var arr = myStage.getChildren()[1].get(".sceneComponents"); 

for (var i =0; i<arr.length; i++) 
{ 
    try 
    { 
     //arr[i].setVisible(false); // Setting its visibility to false works absolutely fine 
     arr[i].remove(); //Trying to remove like this throws the uncaught error 
    } 
    catch(ex) 
    { 
     console.log(ex); 
    } 
} 

这是完全错误日志。

Uncaught TypeError: Cannot call method 'getLayer' of undefined kinetic.js:37 
Kinetic.Node.getLayer kinetic.js:37 
Kinetic.Shape.drawHit kinetic.js:42 
Kinetic.Container.drawHit kinetic.js:41 
Kinetic.Layer.drawHit kinetic.js:44 
Kinetic.Container.drawHit kinetic.js:41 
Kinetic.Container.draw kinetic.js:41 
tick mainScript.js:221 //This is refering to the myStage.draw() line in my code 

UPDATE:

当我用它来删除组件 -

layer.arr[i].remove(); 

我得到在同一行

TypeError: Cannot read property '0' of undefined 
+0

登录的ARR,看看是否有存在价值是不应该存在。 – Klaasvaak

+0

@Klaasvaak他们绝对没问题。我的怀疑正在走向我使用删除功能的方式。在文档中,它没有解释如何使用它。我使用它的方式是对的吗? –

+0

您可以尝试使用Layer.remove – Klaasvaak

回答

1

当您创建以下错误,对于例如一个矩形,你可以像这样去除它:

//create stage have a div with id container: 
var stage = new Kinetic.Stage({ 
       container: 'container', 
       width: CANVAS_WIDTH, 
       height: CANVAS_HEIGHT 
      }); 

//add layer 
var myLayer = new Kinetic.Layer(); 
stage.add(myLayer); 

//add black rectangle to layer 
var myRect = new Kinetic.Rect({ 
x: yourX, 
y: yourY, 
width: yourWitdh, 
height: yourHeight, 
fill: 'black' 
}); 
myLayer.add(myRect); 

//remove rectangle from layer 
myRect.remove(); 
myLayer.draw() 

如果你想删除一个层调用一切:

myLayer.removeChildren(); 

您也可以隐藏和显示的形状:

rect.show(); 
rect.hide(); 

的visisble属性将被设置为true或false。如果它是假的,它不会被绘制。请参阅:

https://github.com/ericdrowell/KineticJS/blob/master/src/Shape.js

if(drawFunc && this.isVisible()) { 
       context.save(); 
       canvas._applyOpacity(this); 
       canvas._applyLineJoin(this);     
       canvas._applyAncestorTransforms(this); 
       drawFunc.call(this, canvas); 
       context.restore(); 
      } 
+1

myLayer.removeChildren()完全挂起电脑(在谷歌浏览器和Internet Explorer 9上)。你可以在这里试试 - https://dl.dropbox.com/u/73176512/InteractiveGuide/index.html,只需点击播放按钮即可。 (只是为了让你知道,我的Javascript代码太混乱了,我很抱歉) –

+0

你想从MainScreenLayer中移除子项?在iniscene函数外声明您的图层,以便您可以在playCorrectScene函数内调用它们。看看是否有效。也不要这样记录太多。 Chrome有时无法处理。 – Klaasvaak

+0

没有,也没有工作。我想我只需要将其可见性设置为false即可。你知道在KineticJS中是否仍然呈现隐形物体? –

相关问题