2013-04-05 37 views
1

即时制作应用程序,但我遇到了问题。当我点击一个按钮时,我需要在画布上添加新点(图像)。下面是一个代码:使用动力学在画布上添加更多图像

var ID = 0; 
var points = []; 

function addPoint(){ 
points.push({id: ID, posX: 0, posY: 0, url: "img/point.png"}); 
ID++; 
showPoints(); 
} 

function showPoints(){ 
var img = new Array(); 
var point = new Array(); 
var stage = new Kinetic.Stage({ 
    container: 'cvsCroatia', 
    width: 574, 
    height: 508 
}); 
var layer = new Kinetic.Layer(); 

for(var j=0; j < ID; j++){ 
    img[j] = new Image(); 
    img[j].src = 'img/point.png'; 
    img[j].onload = (function(){ 
     point[j] = new Kinetic.Image({ 
      x: points[j].posX, 
      y: points[j].posY, 
      image: img[j], 
      width: 13, 
      height: 13, 
      name: img[j], 
      draggable: true 
     }); 
    }); 
    layer.add(point[j]); 

} 
stage.add(layer); 
} 

但我得到了一个错误:

Uncaught TypeError: Cannot set property 'index' of undefined (kinetic-v4.4.0.min.js:29)

你有什么想法,有什么不好? Thx寻求答案。艾伦。对于答案

回答

0
var img = new Array(); // the simplest solution is to make img visible outside your function 
function showPoints(){ 
    // var img = new Array();  // HERE img is a LOCAL variable, only visible to the showPoints() function 
    var point = new Array();   
    var stage = new Kinetic.Stage({ 
    container: 'cvsCroatia', 
    width: 574, 
    height: 508 
}); 
+0

你实际上应该让一切都在这个函数全局范围 – SoluableNonagon 2013-04-05 13:21:49

0

谢谢,我把所有的变量,以在全球范围内,但不幸的是得到了同样的错误..

var ID = 0; 
var points = []; 

var img = new Array(); 
var point = new Array(); 

function showPoints(){ 
var stage = new Kinetic.Stage({ 
    container: 'cvsCroatia', 
    width: 574, 
    height: 508 
}); 
var layer = new Kinetic.Layer(); 

for(var j=0; j < ID; j++){ 
    img[j] = new Image(); 
    img[j].src = 'img/point.png'; 
    img[j].onload = (function(){ 
     point[j] = new Kinetic.Image({ 
      x: points[j].posX, 
      y: points[j].posY, 
      image: img[j], 
      width: 13, 
      height: 13, 
      name: img[j], 
      draggable: true 
     }); 
    }); 
    layer.add(point[j]); 

} 
stage.add(layer); 
} 

    function addPoint(){ 
points.push({id: ID, posX: 0, posY: 0, url: "img/point.png"}); 
ID++; 
showPoints(); 
}