我尝试从json文件加载我的简单阶段,我加载图像但是它们都在一个图层中,而图像不在组中,因此调整大小不起作用,我不知道我应该如何加载所有元素和图层基;
这是我加载的功能(现在只是图像)
function load(loadStage) {
counter = 2;
activeStage = stage;
stage = Kinetic.Node.create(loadStage,'right');
var background = stage.get('.background');
var backgroundImage = stage.get('.backgroundImage');
var clipartsImage = stage.get('.image');
var text = stage.get('.text');
console.log(stage.getChildren());
for(i=0;i<clipartsImage.length;i++){
counter++;
(function() {
var image = clipartsImage[i];
groups[counter] = image.parent.get;
//console.log(image);
var imageObj = new Image();
imageObj.onload = function() {
imageObj.src = image.attrs.src;
console.log(image);
image.setImage(imageObj);
image.on('mouseover', function() {
document.body.style.cursor = 'pointer';
});
image.on('mouseout', function() {
document.body.style.cursor = 'default';
});
image.on('click', function(evt) {
this.children[0].children[3].show();
var shape = evt.targetNode;
this.moveToTop();
active = layers[shape.getId()];
objectId = shape.getId();
});
image.getLayer().draw;
};
imageObj.src = image.attrs.src;
})();
stage.draw();
}
stage.draw();
}
这是我的json文件,http://wklej.org/id/1105520/这是中间阶段。我会继续努力,但如果有人遇到类似的问题并解决了,我将非常感谢你的帮助:)
答案 0 :(得分:0)
您的JSON文件发生了什么? base64字符串已经炸成了一百万行...
对于初学者来说,KineticJS.Layer 不能有一个孩子的图层。参考文献:
https://github.com/ericdrowell/KineticJS/wiki/Change-Log#455-july-28-2013
新的add()验证。如果将无效子项添加到父项,则会引发错误,例如,将图层添加到另一个图层时。
https://github.com/ericdrowell/KineticJS/wiki
KineticJS event not fired for child of a grouped layer
在你的JSON文件中,你有很多层相互分层,这肯定会导致问题。实际上,你看起来你有一个EACH组的层!这是完全错误的KineticJS结构。
您应该对如何以及何时使用图层和组进行一些研究,以下是一些参考资料:
What are the differences between group and layer in KineticJs
https://github.com/ericdrowell/KineticJS/wiki(同样,KineticJS的数据结构层次结构)
无需再拨打stage.draw()
两次。
JSON是一种数据格式,它只存储对象属性。这意味着不存储对附加到对象的事件的任何引用。
这意味着当您加载JSON字符串时,您必须再次将updateAnchor
函数重新绑定到所有锚点。 (类似于将click
函数重新绑定到图像上的方法)
在使用JSON文件创建舞台后,您必须在加载函数中执行类似的操作:
var children = layer.getChildren(); //Use the layer that has all your groups with images/anchors. *REMEMBER you can't layers within layers!
for (var i=0; i<children.length; i++) {
//If name starts with 'anchor'
if (children.getName().indexOf('anchor') !== -1) {
children[i].on('dragmove', function(evt) {
updateAnchor(this);
layer.draw();
});
}
}