Javascript 通用:命名结构和绘图KineticJS
这一个需要更多的描述,很抱歉标题较短 我目前没有我的代码在我面前,但可能会更新与它的工作原理和问题所在的全部细节 基本上我注意到,如果不做或多或少的全局名称窗口,无论形状/组是什么,它都不会绘制它们。我已经做了对象的日志,看看它们是否合适,也没发现它们有什么问题 整个作用域是一个层,首先传递给一个函数,然后我以逻辑方式创建形状和组,而不返回组,而是将层作为参数发送,以便从函数中添加它。当我这样做的时候,我似乎永远无法让它进入容器阶段 此外,我正在循环创建形状,因为我使它们可变,并且更基于百分比,而不是精确的像素,因此我将对象保存在通过循环生成的数组中 我已经做了这个单位首先,它的工作,但在移动到功能后,它停止工作,有什么原因,我可能会错过 另一个注意事项是,如果相关的话,我正在使用AdobeAIR 如果有人有任何想法让我知道,我会张贴实际的代码时,我可以从这张贴几个小时 更新: 基本上,我遇到的问题是,当我将形状/组分解为它们自己的函数时,它根本不想绘制它们。我试着内联调用draw函数,也只是稍后将它们添加到stage中,据我所知,这两个函数都会触发draw 这是密码Javascript 通用:命名结构和绘图KineticJS,javascript,canvas,air,kineticjs,Javascript,Canvas,Air,Kineticjs,这一个需要更多的描述,很抱歉标题较短 我目前没有我的代码在我面前,但可能会更新与它的工作原理和问题所在的全部细节 基本上我注意到,如果不做或多或少的全局名称窗口,无论形状/组是什么,它都不会绘制它们。我已经做了对象的日志,看看它们是否合适,也没发现它们有什么问题 整个作用域是一个层,首先传递给一个函数,然后我以逻辑方式创建形状和组,而不返回组,而是将层作为参数发送,以便从函数中添加它。当我这样做的时候,我似乎永远无法让它进入容器阶段 此外,我正在循环创建形状,因为我使它们可变,并且更基于百分比,
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);
}
}
根据你的问题,我假设绑定是你的动能层 确保已将绑定添加到stage:stage.addbind 添加要绑定的组/矩形后,还要执行bind.draw
从那以后我就明白了 问题是,在向舞台添加任何其他内容之前,必须先将该层添加到舞台。它不在我的代码中,因为我不认为它是一个问题,因为它在其他地方工作 基本上,如果你在一个图层上添加任何东西,那么将图层添加到舞台上,它就会失败。它必须是这样的: 创造舞台 创建层 将图层添加到舞台 将组添加到图层 如有需要,可抽签 最初的做法是这样的: 创造舞台 创建层 将组添加到图层 将图层添加到舞台 如有需要,可抽签
这个问题将被更新,以使这一点变得明显。据我所见,这并不是文档中的一个问题,我可以将其视为令人困惑的问题。无法理解您的问题……这个示例是否有帮助:它实际上可能会更新这个问题,并且应该能够很快显示我的代码。你的说明对我正在做的有一点改变,我将不得不测试它。接近,但这是最后添加的顺序,我的代表因为奖金而很低,但如果可以的话,我会向上投票。