天天看點

Flash與元件:CircleSlider

  今晚是2010年最後一天,要跟随地球重新開始新的一年。一直以來很喜歡kp 的那套min元件,目前還沒有能力去完成一套完整的元件,隻是想做一點實驗而已。太多實驗需要去寫,有時候有很多很多想法,隻是很希望每一個程式都寫得有用一些。未來的日子來,會細心修改之前寫過的程式。好吧,新的一年要更加努力去完善這些實驗。還有很多很多實驗需要動手去做。

  今天晚上就寫了一個之前projectMa的其中一個圓形互動圖形。我并沒有參考他的例子來寫,隻是憑自己的想法去實作,等完善之後将繼續跟進這些實驗。

  好,休息去~新年快樂!

  

  //0-360度元件 //用于調節360度對象使用 //version 1.0 //author 夏天的樹人 package org.summerTree.components { import flash.display.Sprite; import flash.events.*; import flash.display.DisplayObjectContainer; import flash.display.Shape; import flash.filters.*; import flash.geom.*; import flash.filters.BevelFilter; import flash.text.*; public class CircleSlider extends Sprite { private var values:Number = 0; private var minValue:Number = 0; private var maxValue:Number = 100; private var out_radius:Number=40; private var in_radius:Number=15; private var bar_control:Sprite; private var bottom:Shape; private var msg:TextField = new TextField(); public function CircleSlider(parent:DisplayObjectContainer=null,mi nValue:Number=0,maxValue:Number=360) { this.minValue = minValue; this.maxValue = maxValue; if(parent==null) { addEventListener(Event.ADDED_TO_STAGE,init); } else { parent.parent.addChild(this); init(); } } private function init(event:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE,init); addChildren(); } private function addChildren():void { bottom = new Shape(); addChild(bottom); bottom.graphics.beginFill(0xFFFFFF); bottom.graphics.drawCircle(0,0,out_radius); bottom.graphics.drawCircle(0,0,in_radius); bottom.graphics.endFill(); //發光濾鏡; bottom.filters = [getFilter()]; bar_control = new Sprite(); bar_control.buttonMode = true; bar_control.x = 0; bar_control.y = -(out_radius+in_radius)*0.5; addChild(bar_control); bar_control.graphics.beginFill(0x999999); bar_control.graphics.drawCircle(0,0,6); bar_control.graphics.endFill(); bar_control.addEventListener(MouseEvent.MOUSE_DOWN ,onStaDragHandler); bar_control.addEventListener(MouseEvent.MOUSE_OVER ,onMouseOverHandler); bar_control.addEventListener(MouseEvent.MOUSE_OUT, onMouseOutHandler); bar_control.stage.addEventListener(MouseEvent.MOUS E_UP,onStopDragHandler); } private function onStaDragHandler(event:MouseEvent):void { bar_control.stage.addEventListener(MouseEvent.MOUS E_MOVE,onMoveHandler); } private function onMouseOverHandler(event:MouseEvent):void { var myColor:ColorTransform = new ColorTransform(); myColor.color = 0x666666; bar_control.transform.colorTransform = myColor; } private function onMouseOutHandler(event:MouseEvent):void { var myColor:ColorTransform = new ColorTransform(); myColor.color = 0x999999; bar_control.transform.colorTransform = myColor; } private function onMoveHandler(event:MouseEvent):void { //編寫控制的角度 var dy:Number = mouseY; var dx:Number = mouseX; var angle:Number = Math.atan2(dy,dx); var tempX:Number = (out_radius+in_radius)*0.5 * Math.cos(angle); var tempY:Number = (out_radius+in_radius)*0.5 * Math.sin(angle); bar_control.x = tempX; bar_control.y = tempY; if (bar_control.y <= 0 && bar_control.x < 0) { this.value = Math.round(angle * 180 / Math.PI + 450 / 360 * maxValue + minValue); } else { this.value = Math.round(angle * 180 / Math.PI + 90 / 360 * maxValue + minValue); } var evt:Event = new Event(Event.CHANGE); this.dispatchEvent(evt); } private function onStopDragHandler(event:MouseEvent):void { bar_control.stage.removeEventListener(MouseEvent.M OUSE_MOVE,onMoveHandler); } //設定拖動的值 public function set value(dataValue:Number):void { this.values = dataValue; } //傳回拖動的值 public function get value():Number { return values; } //設定對象坐标 public function move(x:Number,y:Number):void { this.x = x; this.y = y; } //設定大小 public function setSize(out_radius:Number,in_radius:Number):void { this.out_radius=out_radius; this.in_radius=in_radius; bottom.graphics.clear(); bottom.graphics.beginFill(0xFFFFFF); bottom.graphics.drawCircle(0,0,out_radius); bottom.graphics.drawCircle(0,0,in_radius); bottom.graphics.endFill(); bottom.filters = [getFilter()]; this.bar_control.y=-0.5*(out_radius+in_radius); this.bar_control.x=0; } //傳回濾鏡 private function getFilter():GlowFilter { return new GlowFilter(0x999999,0.8,9); } } }