⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorshortcuts.as

📁 flash,做點對點移動,殘影+可調整速度
💻 AS
📖 第 1 页 / 共 2 页
字号:
package caurina.transitions.properties {

	/**
	 * properties.ColorShortcuts
	 * List of default special color properties (normal and splitter properties) for the Tweener class
	 * The function names are strange/inverted because it makes for easier debugging (alphabetic order). They're only for internal use (on this class) anyways.
	 *
	 * @author		Zeh Fernando, Nate Chatellier, Arthur Debert
	 * @version		1.0.0
	 */

	import flash.geom.ColorTransform;
	import flash.filters.ColorMatrixFilter;

	import caurina.transitions.Tweener;
	import caurina.transitions.AuxFunctions;

	public class ColorShortcuts {

		// Sources:
		// http://www.graficaobscura.com/matrix/index.html
		// And mario Klingemann's ColorMatrix class as mentioned on the credits:
		// http://www.quasimondo.com/archives/000565.php
		
		// Defines luminance using sRGB luminance
		private static var LUMINANCE_R:Number = 0.212671;
		private static var LUMINANCE_G:Number = 0.715160;
		private static var LUMINANCE_B:Number = 0.072169;
		
		/**
		 * There's no constructor.
		 */
		public function ColorShortcuts () {
			trace ("This is an static class and should not be instantiated.")
		}

		/**
		 * Registers all the special properties to the Tweener class, so the Tweener knows what to do with them.
		 */
		public static function init(): void {

			// Normal properties
			Tweener.registerSpecialProperty("_color_ra", _oldColor_property_get,	_oldColor_property_set,	["redMultiplier"]);
			Tweener.registerSpecialProperty("_color_rb", _color_property_get,		_color_property_set,	["redOffset"]);
			Tweener.registerSpecialProperty("_color_ga", _oldColor_property_get,	_oldColor_property_set,	["greenMultiplier"]);
			Tweener.registerSpecialProperty("_color_gb", _color_property_get,		_color_property_set,	["greenOffset"]);
			Tweener.registerSpecialProperty("_color_ba", _oldColor_property_get,	_oldColor_property_set,	["blueMultiplier"]);
			Tweener.registerSpecialProperty("_color_bb", _color_property_get,		_color_property_set,	["blueOffset"]);
			Tweener.registerSpecialProperty("_color_aa", _oldColor_property_get,	_oldColor_property_set,	["alphaMultiplier"]);
			Tweener.registerSpecialProperty("_color_ab", _color_property_get,		_color_property_set,	["alphaOffset"]);

			Tweener.registerSpecialProperty("_color_redMultiplier", 	_color_property_get, _color_property_set, ["redMultiplier"]);
			Tweener.registerSpecialProperty("_color_redOffset",			_color_property_get, _color_property_set, ["redOffset"]);
			Tweener.registerSpecialProperty("_color_greenMultiplier",	_color_property_get, _color_property_set, ["greenMultiplier"]);
			Tweener.registerSpecialProperty("_color_greenOffset",		_color_property_get, _color_property_set, ["greenOffset"]);
			Tweener.registerSpecialProperty("_color_blueMultiplier",	_color_property_get, _color_property_set, ["blueMultiplier"]);
			Tweener.registerSpecialProperty("_color_blueOffset",		_color_property_get, _color_property_set, ["blueOffset"]);
			Tweener.registerSpecialProperty("_color_alphaMultiplier",	_color_property_get, _color_property_set, ["alphaMultiplier"]);
			Tweener.registerSpecialProperty("_color_alphaOffset",		_color_property_get, _color_property_set, ["alphaOffset"]);

			// Normal splitter properties
			Tweener.registerSpecialPropertySplitter("_color", _color_splitter);
			Tweener.registerSpecialPropertySplitter("_colorTransform", _colorTransform_splitter);

			// Color changes that depend on the ColorMatrixFilter
			Tweener.registerSpecialProperty("_brightness",		_brightness_get,	_brightness_set, [false]);
			Tweener.registerSpecialProperty("_tintBrightness",	_brightness_get,	_brightness_set, [true]);
			Tweener.registerSpecialProperty("_contrast",		_contrast_get,		_contrast_set);
			Tweener.registerSpecialProperty("_hue",				_hue_get,			_hue_set);
			Tweener.registerSpecialProperty("_saturation",		_saturation_get,	_saturation_set, [false]);
			Tweener.registerSpecialProperty("_dumbSaturation",	_saturation_get,	_saturation_set, [true]);

		}


		// ==================================================================================================================================
		// PROPERTY GROUPING/SPLITTING functions --------------------------------------------------------------------------------------------

		// ----------------------------------------------------------------------------------------------------------------------------------
		// _color

		/**
		 * Splits the _color parameter into specific color variables
		 *
		 * @param		p_value				Number		The original _color value
		 * @return							Array		An array containing the .name and .value of all new properties
		 */
		public static function _color_splitter (p_value:*, p_parameters:Array):Array {
			var nArray:Array = new Array();
			if (p_value == null) {
				// No parameter passed, so just resets the color
				nArray.push({name:"_color_redMultiplier",	value:1});
				nArray.push({name:"_color_redOffset",		value:0});
				nArray.push({name:"_color_greenMultiplier",	value:1});
				nArray.push({name:"_color_greenOffset",		value:0});
				nArray.push({name:"_color_blueMultiplier",	value:1});
				nArray.push({name:"_color_blueOffset",		value:0});
			} else {
				// A color tinting is passed, so converts it to the object values
				nArray.push({name:"_color_redMultiplier",	value:0});
				nArray.push({name:"_color_redOffset",		value:AuxFunctions.numberToR(p_value)});
				nArray.push({name:"_color_greenMultiplier",	value:0});
				nArray.push({name:"_color_greenOffset",		value:AuxFunctions.numberToG(p_value)});
				nArray.push({name:"_color_blueMultiplier",	value:0});
				nArray.push({name:"_color_blueOffset",		value:AuxFunctions.numberToB(p_value)});
			}
			return nArray;
		}


		// ----------------------------------------------------------------------------------------------------------------------------------
		// _colorTransform

		/**
		 * Splits the _colorTransform parameter into specific color variables
		 *
		 * @param		p_value				Number		The original _colorTransform value
		 * @return							Array		An array containing the .name and .value of all new properties
		 */
		public static function _colorTransform_splitter (p_value:Object, p_parameters:Array):Array {
			var nArray:Array = new Array();
			if (p_value == null) {
				// No parameter passed, so just resets the color
				nArray.push({name:"_color_redMultiplier",	value:1});
				nArray.push({name:"_color_redOffset",		value:0});
				nArray.push({name:"_color_greenMultiplier",	value:1});
				nArray.push({name:"_color_greenOffset",		value:0});
				nArray.push({name:"_color_blueMultiplier",	value:1});
				nArray.push({name:"_color_blueOffset",		value:0});
			} else {
				// A color transformation object is passed, so converts it to the object values
				nArray.push({name:"_color_redMultiplier",	value:p_value.redMultiplier});
				nArray.push({name:"_color_redOffset", 		value:p_value.redOffset});
				nArray.push({name:"_color_blueMultiplier",	value:p_value.blueMultiplier});
				nArray.push({name:"_color_blueOffset",		value:p_value.blueOffset});
				nArray.push({name:"_color_greenMultiplier",	value:p_value.greenMultiplier});
				nArray.push({name:"_color_greenOffset",		value:p_value.greenOffset});
				nArray.push({name:"_color_alphaMultiplier",	value:p_value.alphaMultiplier});
				nArray.push({name:"_color_alphaOffset",		value:p_value.alphaOffset});
			}
			return nArray;
		}


		// ==================================================================================================================================
		// NORMAL SPECIAL PROPERTY functions ------------------------------------------------------------------------------------------------

		// ----------------------------------------------------------------------------------------------------------------------------------
		// _color_*

		/**
		 * _color_*
		 * Generic function for the ra/rb/etc components of the deprecated colorTransform object
		 */
		public static function _oldColor_property_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {
			return p_obj.transform.colorTransform[p_parameters[0]] * 100;
		}
		public static function _oldColor_property_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
			var tf:ColorTransform = p_obj.transform.colorTransform;
			tf[p_parameters[0]] = p_value / 100;
			p_obj.transform.colorTransform = tf;
		}

		/**
		 * _color_*
		 * Generic function for the redMultiplier/redOffset/etc components of the new colorTransform
		 */
		public static function _color_property_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {
			return p_obj.transform.colorTransform[p_parameters[0]];
		}
		public static function _color_property_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
			var cfm:ColorTransform = p_obj.transform.colorTransform;
			cfm[p_parameters[0]] = p_value;
			p_obj.transform.colorTransform = cfm;
		}

		// ----------------------------------------------------------------------------------------------------------------------------------
		// Special coloring

		/**
		 * _brightness
		 * Brightness of an object: -1 -> [0] -> +1
		 */
		public static function _brightness_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {

			var isTint:Boolean = p_parameters[0];

			/*
			// Using ColorMatrix:
			
			var mtx:Array = getObjectMatrix(p_obj);
			
			var mc:Number = 1 - ((mtx[0] + mtx[6] + mtx[12]) / 3); // Brightness as determined by the main channels
			var co:Number = (mtx[4] + mtx[9] + mtx[14]) / 3; // Brightness as determined by the offset channels
			*/

			var cfm:ColorTransform = p_obj.transform.colorTransform;
			var mc:Number = 1 - ((cfm.redMultiplier + cfm.greenMultiplier + cfm.blueMultiplier) / 3); // Brightness as determined by the main channels
			var co:Number = (cfm.redOffset + cfm.greenOffset + cfm.blueOffset) / 3;

			if (isTint) {
				// Tint style
				//return (mc+(co/255))/2;
				return co > 0 ? co / 255 : -mc;
			} else {
				// Native, Flash "Adjust Color" and Photoshop style
				return co / 100;
			}
		}
		public static function _brightness_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
			//var mtx:Array = getObjectMatrix(p_obj);

			var isTint:Boolean = p_parameters[0];

			var mc:Number; // Main channel
			var co:Number; // Channel offset

			if (isTint) {
				// Tint style
				mc = 1 - Math.abs(p_value);
				co = p_value > 0 ? Math.round(p_value*255) : 0;
			} else {
				// Native, Flash "Adjust Color" and Photoshop style
				mc = 1;
				co = Math.round(p_value*100);
			}

			/*
			// Using ColorMatrix:
			var mtx:Array = [
				mc, cc, cc, cc, co,
				cc, mc, cc, cc, co,
				cc, cc, mc, cc, co,
				0,  0,  0,  1,  0
			];
			setObjectMatrix(p_obj, mtx);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -