{"id":506,"date":"2009-10-11T19:33:03","date_gmt":"2009-10-11T11:33:03","guid":{"rendered":"http:\/\/www.litefeel.com\/?p=506"},"modified":"2019-03-04T01:07:40","modified_gmt":"2019-03-03T17:07:40","slug":"cooldown-effect","status":"publish","type":"post","link":"https:\/\/www.litefeel.com\/cooldown-effect\/","title":{"rendered":"\u6e38\u620f\u91cc\u51b7\u5374\u65f6\u95f4\u6548\u679c cool down (CD) \u6247\u5f62"},"content":{"rendered":"<p>\u975e\u5e38\u62b1\u6b49\uff0c\u8fd9\u4e2a\u53ea\u60f3\u5230\u6548\u679c\uff0c\u5fd8\u8bb0\u4e86CPU\uff0c\u6211\u53c8\u91cd\u65b0\u5199\u4e86\u4e2a\uff0c\u8bf7\u770b <a href=\"http:\/\/www.litefeel.com\/cooldown-effect-optimization\/\">\u51b7\u5374\u65f6\u95f4(CD,cool down) \u6548\u679c\u66f4\u65b0,\u4f18\u5316CPU<\/a><br \/>\n\u5de6\u8fb9\u662f\u4e00\u4e2a\u51b7\u5374\u65f6\u95f4\u6548\u679c\uff0c\u53f3\u8fb9\u662f\u4e00\u4e2a\u6247\u5f62<\/p>\n<div id=\"movableSector\">\n  \u8fd9\u662f\u4e00\u4e2a\u51b7\u5374\u6548\u679ccd\u7684\u6f14\u793ademo,\u5982\u679c\u4f60\u770b\u4e0d\u5230\u8fd9\u4e2aflash,\u8bf7\u5230\u6587\u7ae0\u9875\u9762\u67e5\u770b!\n<\/div>\n<script type=\"text\/javascript\">\nswfobject.embedSWF(\"http:\/\/www.litefeel.com\/assets\/swf\/movableSector.swf\", \"movableSector\",\"600\",\"300\",\"10.1.0\",\"http:\/\/www.litefeel.com\/assets\/swf\/expressInstall.swf\");\n<\/script>\n<!--more-->\n<p>\u8fd9\u91cc\u662f\u4e00\u4e2a\u6e38\u620f\u91cc\u5e38\u7528\u5230\u7684\u51b7\u5374\u65f6\u95f4\u6548\u679c\u3002<br \/>\n\u5148\u662f\u5728 <a href=\"http:\/\/flash.9ria.com\/viewthread.php?tid=4850\">\u8fd9\u91cc<\/a> \u770b\u5230 wizim \u5199\u7684\u8fd9\u4e2a\u6548\u679c\u6ca1\u6709\u5b8c\u5de5\uff0c\u53c8\u770b\u5230\u6709\u597d\u591a\u4eba\u56de\u5e16\u8bf4\u60f3\u8981\u8fd9\u6837\u7684\u6548\u679c\uff0c\u7136\u540e\u6211\u5c31\u628a\u5b83\u5199\u6210\u7c7b\uff0c\u5199\u7684\u66f4\u901a\u7528\u4e9b\u3002<\/p>\n<p><span style=\"color: #ff0000;\">\u53ef\u4ee5\u9644\u52a0\u5230\u4efb\u610f\u663e\u793a\u5bf9\u8c61\u4e0a\uff0c\u53ea\u9700\u76ee\u6807\u663e\u793a\u5bf9\u8c61\u5728\u663e\u793a\u5217\u8868\u91cc\u3002<\/span><br \/>\n\u5f53\u7136\uff0c\u8981\u662fflex\u91cc\u7528\uff0c\u5219\u9700\u7ee7\u627fUIComponent\u3002<br \/>\n\u5e9f\u8bdd\u5c31\u4e0d\u591a\u8bf4\u4e86\uff0c\u76f4\u63a5\u4e0a\u4ee3\u7801\u3002<\/p>\n<p><strong>Sector<\/strong> \u8fd9\u662f\u4e00\u4e2a\u6247\u5f62\u7c7b\uff1a<\/p>\n<pre><code>package com.litefeel.display\n{\n    import flash.display.Sprite;\n    \/**\n     * \u4e00\u4e2a\u6247\u5f62\u7c7b\n     *\n     * www.litefeel.com\n     * @author lite3\n     *\/\n    public class Sector extends Sprite\n    {\n        private var _radius:Number;\n        private var _angle:Number;\n        private var _startFrom:Number;\n        private var _fullColor:uint;\n        private var _lineColor:uint;\n        private var _lineThickness:Number;\n        private var _showTieLine:Boolean;\n\n        public function get showTieLine():Boolean { return _showTieLine; }\n        public function get lineColor():uint { return _lineColor; }\n        public function get lineThickness():uint { return _lineThickness; }\n        public function get fullColor():uint { return _fullColor; }\n        public function get startFrom():Number { return _startFrom; }\n        public function get angle():Number { return _angle; }\n        public function get radius():Number { return _radius; }\n\n        \/**\n         * \u5b9e\u4f8b\u5316\u4e00\u4e2a\u6247\u5f62\n         * @param   radius\n         * @param   angle\n         * @param   startFrom\n         * @param   fullColor\n         * @param   lineColor\n         * @param   lineThickness\n         * @param   showTieLine\n         *\/\n        public function Sector(radius:Number, angle:Number, startFrom:Number = 270,\n            fullColor:uint = 0xFF00FFFF, lineColor:uint = 0xFF000000,\n            lineThickness:Number = 1, showTieLine:Boolean = true)\n        {\n            drawSector(radius, angle, startFrom, fullColor, lineColor,lineThickness, showTieLine);\n        }\n\n        \/**\n         * \u753b\u6247\u5f62\n         * @param   radius      \u534a\u5f84\n         * @param   angle       \u6247\u5f62\u7684\u89d2\u5ea6 &gt;= 0  , if &gt; 360 ,\u5219 = 360\n         * @param   startFrom   \u5f00\u59cb\u89d2\u5ea6        \u65e0\u6548\u503c\u5219\u4e3a0\n         * @param   fullColor   \u586b\u5145\u989c\u8272 ARGB \u683c\u5f0f\u7684\n         * @param   lineColor   \u7ebf\u6761\u989c\u8272 ARGB \u683c\u5f0f\u7684\n         * @param   showTieLine \u662f\u5426\u663e\u793a\u539f\u70b9\u5230\u5f27\u7ebf\u7684\u8fde\u7ebf\n         *\/\n        public function drawSector(radius:Number, angle:Number, startFrom:Number = 270,\n            fullColor:uint = 0xFF00FFFF, lineColor:uint = 0xFF000000,\n            lineThickness:Number = 1, showTieLine:Boolean = true):void\n        {\n            if (isNaN(radius) || radius &lt; 0) radius = 0;\n\n            if (isNaN(angle) || angle &lt; 0) angle = 0;\n            if (angle &gt; 360) angle = 360;\n\n            if (isNaN(startFrom)) startFrom = 0;\n\n            _radius = radius;\n            _angle = angle;\n            _startFrom = startFrom;\n            _fullColor = fullColor;\n            _lineColor = lineColor;\n            _lineThickness = lineThickness;\n            _showTieLine = showTieLine;\n\n            \/\/ \u6e05\u9664\u4ee5\u524d\u7684\n            graphics.clear();\n\n            if (angle &gt;&gt; 24) \/ 0xFF);\n            graphics.beginFill(fullColor &amp;amp; 0xFFFFFF, (fullColor &gt;&gt;&gt; 24) \/ 0xFF);\n\n            var radian:Number = startFrom \/ 180 * Math.PI;  \/\/ \u5f27\u5ea6\uff0c\u4e34\u65f6\u66ff\u6362\u7528\u7684\n            var px:Number = Math.cos(radian) * radius;      \/\/ \u5212\u7ebf\u7684\u5750\u6807\u70b9\n            var py:Number = Math.sin(radian) * radius;\n            graphics.lineTo(px, py);\n\n            if (!showTieLine) graphics.lineStyle(lineThickness, lineColor &amp;amp; 0xFFFFFF, (lineColor &gt;&gt;&gt; 24) \/ 0xFF);\n            \/\/ \u753b\u5706\u5f27\n            while (angle &gt; 0)\n            {\n                var tempAngle:Number = (angle &gt;= 45) ? 45 : angle;\n                \/\/ \u63a7\u5236\u70b9\u5750\u6807\n                radian = (startFrom + tempAngle * 0.5) \/ 180 * Math.PI;\n                var cx:Number = radius \/ Math.cos(tempAngle \/ 360 * Math.PI) * Math.cos(radian);\n                var cy:Number = radius \/ Math.cos(tempAngle \/ 360 * Math.PI) * Math.sin(radian);\n                \/\/ \u66f4\u65b0\u89d2\u5ea6\n                startFrom += tempAngle;\n                angle -= tempAngle;\n                \/\/ \u8ba1\u7b97\u5212\u7ebf\u672b\u70b9\u5750\u6807\n                radian = startFrom \/ 180 * Math.PI;\n                px = Math.cos(radian) * radius;\n                py = Math.sin(radian) * radius;\n                \/\/ \u753b\u7ebf\n                graphics.curveTo(cx, cy, px, py);\n            }\n            \/\/ \u8fde\u63a5\u5230\u7ed3\u675f\u70b9\n            if (!showTieLine) graphics.lineStyle(0, 0, 0);\n            graphics.lineTo(0, 0);\n            graphics.endFill();\n        }\n    }\n}\n<\/code><\/pre>\n<p><strong>MovableSector<\/strong> \u8fd9\u662f\u5b9e\u73b0\u51b7\u5374\u65f6\u95f4\u6548\u679c\u7684\u7c7b\uff1a<\/p>\n<pre><code>package com.litefeel.display\n{\n    import flash.display.DisplayObject;\n    import flash.display.Shape;\n    import flash.display.Sprite;\n    import flash.events.Event;\n    import flash.geom.ColorTransform;\n    import flash.geom.Point;\n    import flash.geom.Rectangle;\n    import flash.utils.getTimer;\n\n    \/**\n     * \u5728\u4e00\u5468\u7ed3\u675f\u540e\uff0c\u89e6\u53d1 flash.events.Event.COMPLETE \u4e8b\u4ef6\n     *\/\n    [Event(name=\"complete\", type=\"flash.events.Event\")]\n\n    \/**\n     * \u4e00\u4e2a\u53ef\u8f6c\u52a8\u7684\u6247\u5f62,\u5c31\u50cf\u6e38\u620f\u91cc\u7684\u51b7\u5374\u65f6\u95f4\u4e00\u6837\n     * \u53ef\u4ee5\u9644\u52a0\u5230\u4efb\u610f\u663e\u793a\u5bf9\u8c61,\u4e5f\u4e0d\u7528\u7406\u4f1a\u76ee\u6807\u662f\u5426\u7f29\u653e\uff0c\u6ce8\u518c\u70b9\u4f4d\u7f6e\n     * \u53ea\u9700\u8981\u76ee\u6807\u5728\u73b0\u5b9e\u5217\u8868\u91cc\n     *\n     * www.litefeel.com\n     * @author lite3\n     *\/\n    public class MovableSector extends Sprite\n    {\n        private var _running:Boolean = false;\n        private var _color:uint;\n\n        private var beginTime:Number;   \/\/ \u5f00\u59cb\u7684\u65f6\u95f4\n        private var totalTime:Number;   \/\/ \u603b\u65f6\u95f4\n        private var startFrom:Number;   \/\/ \u5f00\u59cb\u7684\u89d2\u5ea6\n\n        private var sector:Sector;\n        private var maskShape:Shape;\n\n        public function MovableSector(display:DisplayObject)\n        {\n            mouseChildren = false;\n            mouseEnabled = false;\n\n            if (display) setTarget(display);\n        }\n\n        \/**\n         * \u662f\u5426\u5728\u8f6c\u52a8\n         *\/\n        public function get running():Boolean { return _running; }\n\n        \/**\n         * \u989c\u8272 \u4e0d\u5305\u62ec alpha\u901a\u9053\n         *\/\n        public function get color():uint { return _color; }\n        public function set color(value:uint):void\n        {\n            if (_color != value)\n            {\n                _color = value;\n                if (maskShape)\n                {\n                    var r:Number = (value &amp;amp; 0xFF0000) &gt;&gt;&gt; 16;\n                    var g:Number = (value &amp;amp; 0x00FF00) &gt;&gt;&gt; 8;\n                    var b:Number = value &amp;amp; 0x0000FF;\n                    trace(r, g, b);\n                    maskShape.transform.colorTransform = new ColorTransform(0, 0, 0, 1, r, g, b);\n                }\n            }\n\n        }\n\n        \/**\n         * \u8bbe\u7f6e\u76ee\u6807\uff0c\u5e76\u6dfb\u52a0\u5230\u76ee\u6807\u4e0a\u5c42\n         * \u76ee\u6807\u5fc5\u987b\u5728\u73b0\u5b9e\u5217\u8868\u91cc\n         * \u8f6c\u52a8\u7ed3\u675f\u540e\u51fa\u53d1complete\u4e8b\u4ef6\n         *\n         * @param   display\n         * @eventType   flash.events.Event\n         *\/\n        public function setTarget(display:DisplayObject):void\n        {\n            \/\/ init UI\n            if (sector) removeChild(sector);\n            if (!maskShape) maskShape = new Shape();\n\n            var radius:Number = Math.sqrt(display.width * display.width + display.height * display.height) * 0.5;\n            sector = new Sector(radius, 0, -90, 0xFFFFFFFF, 0, 0, false);\n            addChild(sector);\n\n            var rect:Rectangle = display.getBounds(display.parent);\n            var stageP:Point = display.localToGlobal(new Point(rect.x, rect.y));\n\n            var halfW:Number = rect.width * 0.5;\n            var halfH:Number = rect.height * 0.5;\n            maskShape.graphics.clear();\n            maskShape.graphics.beginFill(_color);\n            for (var i:int = 0; i &lt; rect.width; i++)\n            {\n                for (var j:int = 0; j &lt; rect.height; j++)\n                {\n                    if (display.hitTestPoint(rect.x + i, rect.y + j, true))\n                        maskShape.graphics.drawRect(i - halfW, j - halfH, 1, 1);\n                }\n            }\n            addChild(maskShape);\n            maskShape.cacheAsBitmap = true;\n            maskShape.mask = sector;\n\n            this.x = rect.x + halfW;\n            this.y = rect.y + halfH;\n\n            \/\/ \u6dfb\u52a0\u5230\u663e\u793a\u5217\u8868\n            display.parent.addChildAt(this, display.parent.getChildIndex(display) + 1);\n        }\n\n        \/**\n         * \u4ece\u67d0\u4e2a\u89d2\u5ea6\u5f00\u59cb\u8f6c\u4e00\u5468\n         * @param   startFrom   \u5f00\u59cb\u8f6c\u52a8\u7684\u89d2\u5ea6\n         * @param   totalTime   \u8f6c\u4e00\u5708\u6240\u7528\u7684\u65f6\u95f4(\u5355\u4f4d:\u6beb\u79d2)\n         *\/\n        public function start(startFrom:Number, totalTime:Number):void\n        {\n            if (sector)\n            {\n                this.startFrom = startFrom;\n                this.totalTime = totalTime;\n                beginTime = getTimer();\n                _running = true;\n\n                \/\/ \u5148\u753b\u4e00\u4e2a\u5706\n                sector.drawSector(sector.radius, 360, startFrom, 0xCC000000, 0x00000000, 0, false);\n\n                if (!sector.hasEventListener(Event.ENTER_FRAME))\n                    sector.addEventListener(Event.ENTER_FRAME, enterFrameHandler);\n            }\n        }\n\n        private function enterFrameHandler(e:Event):void\n        {\n            var postTime:Number = getTimer() - beginTime;\n\n            \/\/ \u65f6\u95f4\u5230\u4e86\n            if (postTime &gt;= totalTime)\n            {\n                sector.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);\n                sector.drawSector(sector.radius, 0);\n                _running = false;\n                dispatchEvent(new Event(Event.COMPLETE));\n            }\n            \/\/ \u65f6\u95f4\u8fd8\u6ca1\u5230\n            else\n            {\n                var postAngle:Number = 360 * postTime \/ totalTime;\n                sector.drawSector(sector.radius, 360 - postAngle, startFrom + postAngle, 0x0, 0x0, 0, false);\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<p><a href=\"http:\/\/www.litefeel.com\/assets\/soundCode\/movableSector.rar\">\u5b8c\u6574\u6e90\u7801\u4e0b\u8f7d\u261e<\/a><\/p>","protected":false},"excerpt":{"rendered":"\u975e\u5e38\u62b1\u6b49\uff0c\u8fd9\u4e2a\u53ea\u60f3\u5230\u6548\u679c\uff0c\u5fd8\u8bb0\u4e86CPU\uff0c\u6211\u53c8\u91cd\u65b0\u5199\u4e86\u4e2a\uff0c\u8bf7\u770b \u51b7\u5374\u65f6\u95f4(CD,cool down) \u6548\u679c\u66f4\u65b0, [&hellip;]","protected":false},"author":96,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[152,149,150,151],"class_list":["post-506","post","type-post","status-publish","format-standard","hentry","category-mylib","tag-cool-down","tag-movablesector","tag-sector","tag-151"],"_links":{"self":[{"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/posts\/506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/users\/96"}],"replies":[{"embeddable":true,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/comments?post=506"}],"version-history":[{"count":2,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/posts\/506\/revisions"}],"predecessor-version":[{"id":3794,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/posts\/506\/revisions\/3794"}],"wp:attachment":[{"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/media?parent=506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/categories?post=506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.litefeel.com\/wp-json\/wp\/v2\/tags?post=506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}