2016-02-04 4 views
0

У меня есть проект с использованием easelJS, в котором я пытаюсь просто изменить цвет объекта фигуры. У меня есть couple от examples, но оба они, кажется, указывают, что мне нужно будет полностью перерисовать фигуру с вызовом graphics.beginFill(). Это кажется полностью излишним, учитывая, что я уже сохранил свой объект формы и могу выполнять другие манипуляции на нем. Я также пытался использовать ColorFilter и ColorMatrix, но не успел сделать чистую цветопередачу. В некоторых случаях цвет существенно «перезаписывает» деталь формы.Измените цвет формы без воссоздания

У меня есть массив ShapeObject, что я хранить createjs.Shape() объект.

var ShapeObject = function() 
    { 
      this.name; 
      this.shape; 
      this.rotation; 
      this.color; 
    }; 

sObject = new ShapeObject(); 

myShape = new createjs.Shape(); 
sObject.shape = myShape; 

shapes = new Array(); 
shapes.push(sObject); 

Позже я могу получить форму из массива и применить фильтр, например,

s = shapes[i]; 
    filter = new createjs.ColorFilter(0,0,0,1, 255,128,0,0); 
    s.shape.filters = [ filter ]; 

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

s.shape.graphics.clear().beginFill(color); 

У кого-нибудь есть идея, как просто изменить цвет, не полностью воссоздавая оригинальную форму?

EDIT

После ответа относительно .command и createjs command blog post я создал следующее.

var theShape = new createjs.Shape(); 

    var fillCommand = theShape.graphics.beginFill("yellow").command; 

    theShape.graphics.setStrokeStyle(1) 
     .beginStroke(createjs.Graphics.getRGB(0, 0, 0)) 
     .drawCircle(0, 0, 20) 
     .moveTo(0,-20) 
     .lineTo(0,0) 
     .moveTo(0,0) 
     .lineTo(20,0); 

    fillCommand.style = "orange"; 

Несмотря на почти идентичны примерам я получаю ошибку Uncaught TypeError: Cannot set property 'style' of undefined в последней строке выше.

+1

Любой шанс, что вы используете старую версию EaselJS? Команды добавлены в 0.7.0. Вот ваш пример с использованием 0.8.2: http://jsfiddle.net/lannymcnie/5km8a4st/ – Lanny

+0

Оказывается, я использовал 0.7.0, так что хороший звонок там. Я следил за учебником, который заставил меня добавить ссылки cdn, но не потрудился проверить текущую версию! – McArthey

ответ

2

Я бы не использовал ColorFilter или ColorMatrix, это, вероятно, будет намного медленнее. Но вы могли бы использовать объект Graphics команду, проверить документы: http://www.createjs.com/docs/easeljs/classes/Graphics.html

var fillCommand = myGraphics.beginFill("red").command; 
// ... later, update the fill style/color: 
fillCommand.style = "blue"; 
+0

Я прошел через документы совсем немного, но я не заметил «command». Я взгляну. – McArthey

+1

http://blog.createjs.com/new-command-approach-to-easeljs-graphics/ – Lanny

+0

См. Мои изменения в отношении свойства .command – McArthey

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