Javascript 通用:命名结构和绘图KineticJS

Javascript 通用:命名结构和绘图KineticJS,javascript,canvas,air,kineticjs,Javascript,Canvas,Air,Kineticjs,这一个需要更多的描述,很抱歉标题较短 我目前没有我的代码在我面前,但可能会更新与它的工作原理和问题所在的全部细节 基本上我注意到,如果不做或多或少的全局名称窗口,无论形状/组是什么,它都不会绘制它们。我已经做了对象的日志,看看它们是否合适,也没发现它们有什么问题 整个作用域是一个层,首先传递给一个函数,然后我以逻辑方式创建形状和组,而不返回组,而是将层作为参数发送,以便从函数中添加它。当我这样做的时候,我似乎永远无法让它进入容器阶段 此外,我正在循环创建形状,因为我使它们可变,并且更基于百分比,

这一个需要更多的描述,很抱歉标题较短

我目前没有我的代码在我面前,但可能会更新与它的工作原理和问题所在的全部细节

基本上我注意到,如果不做或多或少的全局名称窗口,无论形状/组是什么,它都不会绘制它们。我已经做了对象的日志,看看它们是否合适,也没发现它们有什么问题

整个作用域是一个层,首先传递给一个函数,然后我以逻辑方式创建形状和组,而不返回组,而是将层作为参数发送,以便从函数中添加它。当我这样做的时候,我似乎永远无法让它进入容器阶段

此外,我正在循环创建形状,因为我使它们可变,并且更基于百分比,而不是精确的像素,因此我将对象保存在通过循环生成的数组中

我已经做了这个单位首先,它的工作,但在移动到功能后,它停止工作,有什么原因,我可能会错过

另一个注意事项是,如果相关的话,我正在使用AdobeAIR

如果有人有任何想法让我知道,我会张贴实际的代码时,我可以从这张贴几个小时

更新:

基本上,我遇到的问题是,当我将形状/组分解为它们自己的函数时,它根本不想绘制它们。我试着内联调用draw函数,也只是稍后将它们添加到stage中,据我所知,这两个函数都会触发draw

这是密码

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


从那以后我就明白了

问题是,在向舞台添加任何其他内容之前,必须先将该层添加到舞台。它不在我的代码中,因为我不认为它是一个问题,因为它在其他地方工作

基本上,如果你在一个图层上添加任何东西,那么将图层添加到舞台上,它就会失败。它必须是这样的:

创造舞台

创建层

将图层添加到舞台

将组添加到图层

如有需要,可抽签

最初的做法是这样的:

创造舞台

创建层

将组添加到图层

将图层添加到舞台

如有需要,可抽签


这个问题将被更新,以使这一点变得明显。据我所见,这并不是文档中的一个问题,我可以将其视为令人困惑的问题。

无法理解您的问题……这个示例是否有帮助:它实际上可能会更新这个问题,并且应该能够很快显示我的代码。你的说明对我正在做的有一点改变,我将不得不测试它。接近,但这是最后添加的顺序,我的代表因为奖金而很低,但如果可以的话,我会向上投票。