2013-12-02 2 views
0

Это займет немного больше, чтобы описать, извините за более короткий заголовок.Generic: Структура и чертеж именования KineticJS

В настоящее время у меня нет моего кода передо мной, но может обновить его с полной информацией о том, как он работает и где проблема.

В основном я замечаю, что, не делая более или менее глобального имени (window.whatever) для фигур/групп, он никогда не будет их рисовать. Я сделал журналы объектов, чтобы убедиться, что они правильные и не видели ничего плохого с ними.

Полный объем - это первый слой, который передается функции, которая затем логически формирует фигуры и группы, не передавая группы назад и вместо этого отправляя слой в качестве параметра, чтобы добавить его изнутри функции , Когда я делаю это так, кажется, что я никогда не смогу его привлечь к контейнеру (этап).

Чтобы добавить к нему, я создаю круги для создания фигур, так как я делаю их переменными и более процентными, а затем точными пикселями, поэтому я держу объекты в массиве, который генерируется через цикл.

Я сделал эту плоскость сначала, и она сработала, однако после ее перемещения в функцию она перестала работать, есть ли какие-либо причины для этого, я могу не хватать?

Другое примечание, если это актуально, я использую Adobe AIR.

Если у кого-нибудь есть идеи, дайте мне знать, я отправлю фактический код, когда смогу (несколько часов с этой публикации).

UPDATE:

В основном проблема, которую я имею что когда я отделить формы/группы в свою собственную функцию, которую он не хочет, чтобы привлечь их на всех. Я попытался вызывать функцию draw inline, а также просто добавить их на сцену позже, и я понимаю, что это приведет к розыгрышу.

здесь код

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

Не могу понять, что вы просите ... Помогает ли этот пример: http://jsfiddle.net/m1erickson/453n6/ – markE

+0

На самом деле это может привести к обновлению вопроса и вскоре сможет показать мой код , У вас небольшое изменение в том, что я делаю, мне придется его протестировать. –

ответ

0

С тех пор я понял.

Проблема в том, что слой должен быть добавлен на сцену, прежде чем что-либо еще добавит его. Это не было в моем коде, потому что я не рассматривал его как проблему, поскольку он работал в другом месте.

В принципе, если вы добавляете что-либо к слою, добавьте слой на сцену, чтобы он не сработал.он должен идти, как это:

СОЗДАТЬ ЭТАП

СОЗДАТЬ СЛОЙ

ADD СЛОЙ НА ЭТАП

Добавление групп СЛОЙ

отображаются, если НЕОБХОДИМЫЕ

Как это было сделано первоначально такой:

C REATE ЭТАП

СОЗДАТЬ СЛОЙ

ДОБАВИТЬ ГРУППЫ наслаивать

ADD СЛОЙ НА ЭТАП

отображаются, если НЕОБХОДИМЫЕ

вопрос будет обновляться, чтобы сделать это очевидным, это то, что есть не в документации, как проблема (насколько я видел), и я вижу, что это путают некоторые.

0

Из Вашего вопроса, я предполагаю, что bind ваш Kinetic.Layer.

  1. Убедитесь, что связывание добавлено на сцену: stage.add (bind);

  2. После добавления групп/прямоугольников для связывания также выполняйте bind.draw();

+0

Закрыть, но это был заказ добавления в конце, моя репутация низка из-за щедрости, но я мог бы продвинуться, если бы мог. –

Смежные вопросы