Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 16.03.2016, 22:45
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 1  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
По умолчанию выбор цвета [colorPicker]

Допустим есть пара объектов, разных по цвету. При нажатии на которые цветовая схема должна передаваться в колорпикер т.е. по сути, смещать элементы управления пикером. В принципе, это своего рода, инструмент пипетка.
Код AS3:
package {
 
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
	import flash.events.Event;
    import flash.events.MouseEvent;
 
    public class ColorPicker extends Sprite
    {
        private var _svBmp:Bitmap;
        private var _hBmp:Bitmap;
        private var _rot:uint = 0;
        private var _slider:Sprite;
        private var _circle:Sprite;
        private var _color:uint = 0xFFFFFF;
 
        public function get color():uint
        {
            return _color;
        }
 
        private function bg():void
        {
			this.graphics.clear()
            this.graphics.beginFill(color);
            this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            this.graphics.endFill();
        }
 
        public function ColorPicker()
        {
            this.x = this.y = 100;
 
            //sv
            var svbmpd:BitmapData = CreatePickColor.svBmpd(_rot);
            _svBmp = new Bitmap(svbmpd);
            addChild(_svBmp);
            //h
            var hbmpd:BitmapData = CreatePickColor.hBmpd();
            _hBmp = new Bitmap(hbmpd);
            addChild(_hBmp);
            _hBmp.x = 210;
 
            //slider
            _slider = new Sprite();
            _slider.graphics.lineStyle(2);
            _slider.graphics.beginFill(0, 0);
            _slider.graphics.drawRoundRect(-10, -3, 20, 6, 4, 4);
            _slider.graphics.endFill();
            addChild(_slider);
            _slider.x = _hBmp.x + 10;
            _slider.y = _hBmp.y;
            _slider.addEventListener(MouseEvent.MOUSE_DOWN, onSliderDown);
            //circle
            _circle = new Sprite();
            _circle.graphics.lineStyle(1, 0xffffff);
            _circle.graphics.beginFill(0, 0);
            _circle.graphics.drawCircle(0, 0, 4);
            _circle.graphics.endFill();
            var child:Sprite = new Sprite();
            child.graphics.lineStyle(1.5);
            child.graphics.drawCircle(0, 0, 3);
            _circle.addChild(child);
            addChild(_circle);
 
            _circle.addEventListener(MouseEvent.MOUSE_DOWN, onCircleDown);
        }
 
 
        private function onSliderDown(e:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onSliderMove);
            stage.addEventListener(MouseEvent.MOUSE_UP, onSliderUp);
        }
 
        private function onCircleDown(e:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onCircleMove);
            stage.addEventListener(MouseEvent.MOUSE_UP, onCircleUp);
        }
 
        private function onSliderMove(e:MouseEvent):void
        {
            _slider.y = mouseY;
            if(_slider.y < _hBmp.y)
                _slider.y = _hBmp.y;
            else if(_slider.y >= _hBmp.y+_hBmp.height)
                _slider.y = _hBmp.y + _hBmp.height - 1;
            svColorChange();
            _color = _svBmp.bitmapData.getPixel(_circle.x, _circle.y);
            bg();
        }
 
        private function onCircleMove(e:MouseEvent):void
        {
            _circle.x = mouseX;
            _circle.y = mouseY;
            if(_circle.y < _svBmp.y)
                _circle.y = _svBmp.y;
            else if(_circle.y >= _svBmp.y + _svBmp.height)
                _circle.y = _svBmp.y + _svBmp.height - 1;
            if(_circle.x < _svBmp.x)
                _circle.x = _svBmp.x;
            else if(_circle.x >= _svBmp.x + _svBmp.width)
                _circle.x = _svBmp.x + _svBmp.width - 1;
            _color = _svBmp.bitmapData.getPixel(_circle.x, _circle.y);
            bg();
        }
 
        private function onSliderUp(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, onSliderMove);
            stage.removeEventListener(MouseEvent.MOUSE_UP, onSliderUp);
            _color = _svBmp.bitmapData.getPixel(_circle.x, _circle.y);
            bg();
        }
 
        private function onCircleUp(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, onCircleMove);
            stage.removeEventListener(MouseEvent.MOUSE_UP, onCircleUp);
            _color = _svBmp.bitmapData.getPixel(_circle.x, _circle.y);
 
			dispatchEvent(new Event(Event.CHANGE));
            bg();
        }
 
        private function svColorChange():void
        {
            removeChild(_svBmp);
            _rot = 359-(_slider.y)*(359/(_hBmp.height));
            var svbmpd:BitmapData = CreatePickColor.svBmpd(_rot);
            _svBmp = new Bitmap(svbmpd);
            addChild(_svBmp);
            setChildIndex(_circle, numChildren-1);
        }
    }
}
 
 
import flash.display.Bitmap;
import flash.display.BitmapData;
 
import frocessing.color.ColorHSV;
 
class CreatePickColor
{
    public static function svBmpd(rot:Number, size:uint = 200):BitmapData
    {
        var bmpd:BitmapData = new BitmapData(size, size, false, 0);
        bmpd.lock();
        for(var y:uint = 0; y < size; y++)
            for(var x:uint = 0; x < size; x++)
                bmpd.setPixel(x, y, (new ColorHSV(rot, x/size, 1-y/size)).toRGB().value);
        bmpd.unlock();
        return bmpd;
    }
 
    public static function hBmpd(size:uint = 200):BitmapData
    {
        var bmpd:BitmapData = new BitmapData(20, size, false, 0);
        bmpd.lock();
        for(var y:uint = 0; y < size; y++)
            for (var x:uint = 0; x < size; x++)
                bmpd.setPixel(x, y, (new ColorHSV(359-y*(359/size))).toRGB().value);
        bmpd.unlock();
        return bmpd;
    }
}
testColorPicker.swf   (3.8 Кб)


Может есть какие мысли или можете посоветовать нечто похожее.
Вложения
Тип файла: swf testColorPicker.swf (3.8 Кб, 507 просмотров)

Создать новую тему   Часовой пояс GMT +4, время: 12:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:18.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.