这个需要更多的描述,抱歉较短的标题。
我目前没有在我面前的代码,但可能会更新它的详细信息,包括它的工作原理和问题所在。
基本上我注意到,如果没有为形状/组做一个或多或少的全局名称(window.whatever),它将永远不会绘制它们。我已经完成了对象的日志,看它们是否正确并且没有看到它们的任何问题。
完整范围首先是一个层,然后传递给一个函数,然后我以逻辑方式创建形状和组,而不将组传回,而是将图层作为参数发送,以从函数中添加它。当我这样做时,似乎我永远无法将它绘制到容器(舞台)。
要添加它,我正在循环创建形状,因为我使它们变量和基于精确像素的更多百分比,所以我将对象保存在通过循环生成的数组中。
我先做了这个单位并且它有效,但是在将它移动到它停止工作的功能后,是否有任何理由我可能会丢失?
如果它是相关的另一个注释,我使用的是Adobe AIR。
如果有任何想法让我知道,我会尽可能发布实际代码(距离此帖子几个小时)。
更新:
基本上我遇到的问题是,当我将形状/组分成它们自己的功能时,它根本不想绘制它们。我试图将绘图函数内联调用,并且稍后将它们添加到舞台上,我的理解都会触发绘制。
这是代码
var forms = {
selector:function(params,bind){
//globals
var parent,obj,lastWidth=0,items=[];
//setup defaults
var params = params || {};
params.x = params.x || 0;
params.y = params.y || 0;
params.active = params.active || 0;
params.height = params.height || 200;
params.children = params.children || [{
fill:'yellow'
}];
params.width = params.width || bind.getWidth();
params.margins = params.margins || 5;
//container for selector
parent = new Kinetic.Group({
x:params.x,
y:params.y,
height:params.height,
width:params.width
});
air.Introspector.Console.log(params);
var totalMargins = params.margins*(params.children.length+1),
activeWidth = (params.width-totalMargins)/2,
subItems = params.children.length-1,
subWidth = activeWidth/subItems,
itemHeight = (params.height-params.margins)/2;
//loop all children
for(var i=0;i<params.children.length;i++){
//use an array to store objects
items[i]={};
//create default object for rectangle
obj = {};
obj.y = params.margins;
obj.fill = params.children[i].fill;
if(params.active==i){
obj.width = activeWidth;
}else{
obj.width = subWidth;
}
obj.x = params.margins+lastWidth;
obj.height = itemHeight;
lastWidth = lastWidth+(params.margins+obj.width);
//create group for text
items[i].text = new Kinetic.Group({
x:0,
y:itemHeight+params.margins
});
//create box for text
items[i].box = new Kinetic.Rect({
x: params.margins,
y: params.margins,
width:params.width-(params.margins*2),
height:(params.height-itemHeight)-(params.margins*2),
fill:'yellow'
});
air.Introspector.Console.log(items[i].box);
//add box to text groups
items[i].text.add(items[i].box);
//create item
items[i].item = new Kinetic.Rect(obj);
//add groups to parent
parent
.add(items[i].item)
.add(items[i].text);
}
//add parent to the bound container
bind.add(parent);
}
}
答案 0 :(得分:0)
从你的问题来看,我假设bind
是你的Kinetic.Layer。
确保已将绑定添加到舞台:stage.add(bind);
将您的组/ rects添加到bind后,也可以执行bind.draw();
答案 1 :(得分:0)
我已经弄清楚了。
问题是在添加任何其他内容之前必须将该图层添加到舞台中。它不在我的代码中,因为我没有把它视为一个问题,因为它在其他地方工作。
基本上,如果您向图层添加任何内容,则将图层添加到舞台中将失败。它必须是这样的:
创建阶段
创建层
将舞台添加到舞台
向群体添加群组
如果需要画画
最初的方式是这样的:
创建阶段
创建层
向群体添加群组
将舞台添加到舞台
如果需要画画
这个问题将会更新以使其显而易见,这是文档中不存在的问题(据我所知),我可以将其视为令人困惑的一些。