Как в Flash CS4 AS3.0 изменить цвет заливки фигур одним щелчком мыши?

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

в зависимости от выбранного цвета они должны иметь возможность заливать формы этим цветом. Смените цвета на полпути, передумали и т. Д.

У меня нет проблем с использованием более ранней версии AS, если она проще.


person Nick    schedule 15.06.2011    source источник
comment
Похоже, у вас есть начало идеи, но вам нужно будет создать более подробный план того, как именно вы хотите, чтобы ваша программа работала, прежде чем вы сможете ее построить или даже получить более конструктивную помощь. --- Измените цвета на полпути, измените свое мнение и т. Д. - это непонятный вопрос, как именно вы хотите, чтобы это работало.   -  person ocodo    schedule 15.06.2011
comment
на самом деле, с моей стороны было глупо предлагать использовать Tweener. я отредактировал свой ответ.   -  person Chunky Chunk    schedule 10.07.2011


Ответы (3)


вы можете использовать flash.filters.ColorMatrixFilter - примеры есть в связанной документации.

это также очень легко сделать с помощью ColorShortcuts Tweener, назначив _Color свойство шестнадцатеричное значение цвета. кроме того, этот метод позволяет вам очень легко плавно переходить в цвет, при необходимости назначая ненулевое значение обязательному свойству time.

Tweener.addTween(myShape, {time: 0.0, _Color: 0xFF0000});

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


[EDIT] вместо использования Tweener, как я поспешно предложил ранее, или довольно сложного ColorMatrixFilter, вы можете использовать ColorTransform, чтобы легко изменить цвет экранного объекта. это также самый распространенный подход в AS3. вот пример:

import flash.geom.ColorTransform;

var myShape:Shape = new Shape();
myShape.graphics.beginFill(0xFF0000, 1.0);
myShape.graphics.drawRect(0, 0, 100, 100);
myShape.graphics.endFill();

addChild(myShape);

var myColorTransform:ColorTransform = new ColorTransform;
myColorTransform.color = 0x0000FF;
myShape.transform.colorTransform = myColorTransform;

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

person Chunky Chunk    schedule 15.06.2011

Я должен предупредить вас, что заставить это работать так же, как говорят, работает Paint, на самом деле будет довольно сложно.

Я бы посмотрел на то, чтобы сделать весь ваш холст Bitmap.

Ресурсы:

  1. Bitmap
  2. BitmapData (здесь будут ключевые методы)

Когда нарисованы фигуры и тому подобное, используйте fillRect(). Для такого инструмента, как ведро с краской (например, краска), обратите внимание на _ 5_.

Я не совсем уверен, как можно создать инструмент «ведро с краской», но я думаю о цикле, который использует _ 6_, чтобы проверить цвета каждого пикселя вокруг места щелчка, а затем использует _ 7_, чтобы изменить цвет каждого. Вам нужно будет создать метод, который возвращает массив всех пикселей определенного цвета, которые не блокируются другим цветом (т. Е. Чтобы вы не использовали ведро с краской и не меняли цвет all < / strong> пиксели на холсте).

Скорее всего, существуют библиотеки для такого рода вещей.

Надеюсь, это приведет вас на верный путь.

person Marty    schedule 15.06.2011
comment
это сработает, но, возможно, это самое сложное решение. - person Chunky Chunk; 15.06.2011

Или просто воспользуйтесь фильтром. См. DisplayObject.filters

person Tom    schedule 15.06.2011
comment
Разбивая фигуры на части, которые можно «заполнить» с помощью цветового фильтра. - person Tom; 15.06.2011
comment
Мне интересно, не могли бы вы привести пример? - person Marty; 15.06.2011
comment
применить цветной фильтр к shape = ›shape превращается в этот цвет (в целом: ничего умного) hth. - person Tom; 15.06.2011
comment
Ах, извините, я думал, что все фигуры будут объединены в растровое изображение (чтобы не разделять). Если это не так, вы можете использовать colorTransform. - person Marty; 15.06.2011