공부놀이/ActionScripT 2007. 10. 24. 17:13

[3.0] 커스텀 버튼 클래스

package CustomButton {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.geom.ColorTransform;
 import flash.text.TextField;
 import flash.text.TextFormat;
 import flash.text.TextFormatAlign;

 public class CustomButton extends Sprite
 {
  private var btnTarget:Sprite;

  private var lbButton:TextField;
  private var lbFormat:TextFormat;
  private var btnName:String;
 
  private var btnColor:uint;
  private var isToggle:Boolean;
  private var isTargeted:Boolean;
 
  private var _toggled:Boolean;
 
  public function CustomButton(mcTarget:Sprite = null, color:uint = 0xffcc33)
  {
   if(mcTarget == null) {
    btnTarget = new Sprite();
    isTargeted = false;
    btnColor = color;
   } else {
    btnTarget = mcTarget;
    isTargeted = true;
    color = 0x000000;
   }
   btnName = "Button";
  }
 
  public function get toggled():Boolean { return _toggled; }
 
 
  public function activate():void
  {
   this.buttonMode = true;
   this.useHandCursor = true;
   draw_button();
  }
 
  public function destroy():void
  {
   isAlive(false);
   this.buttonMode = false;
   
   var dsFormat:TextFormat = new TextFormat();
   dsFormat.bold = false;
   dsFormat.color = 0x777777;
   
   lbButton.setTextFormat(dsFormat);
   
   btnTarget.removeEventListener(MouseEvent.MOUSE_OVER, over_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_OUT, out_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_UP, up_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_DOWN, down_listener);
  }
 
  public function setToggle(val:Boolean):void
  {
   if(val) {
    isToggle = true;
    make_toggle();
   } else {
    isToggle = false;
   }
  }
 
  public function set label(button_name:String):void
  {
   btnName = button_name;
   addLabel();
  }
 
  public function get label():String
  {
   return btnName;
  }
 
  private function addLabel():void
  {
   if(lbButton == null){
    lbButton = new TextField();
    lbButton.width = btnTarget.width;
    lbButton.height = 20;
    lbButton.x = (this.width - lbButton.width)/2;
    lbButton.y = (this.height - lbButton.height)/2;
    lbButton.mouseEnabled = false;
   }
   
   lbFormat = new TextFormat();
   if(!isToggle)
    lbFormat.color = 0xFFFFFF;
   lbFormat.bold = false;
   lbFormat.size = 10;
   lbFormat.align = TextFormatAlign.CENTER;
   
   lbButton.text = btnName;
   
   lbButton.setTextFormat(lbFormat);
   
   this.addChild(lbButton);
  }
 
  private function addListeners():void
  {
   btnTarget.addEventListener(MouseEvent.MOUSE_OVER, over_listener);
   btnTarget.addEventListener(MouseEvent.MOUSE_OUT, out_listener);
   btnTarget.addEventListener(MouseEvent.MOUSE_DOWN, down_listener);
   btnTarget.addEventListener(MouseEvent.MOUSE_UP, up_listener);
  }
 
  private function over_listener(evt:MouseEvent):void
  {
   //trace("over");
   var ovFormat:TextFormat = new TextFormat();
   ovFormat.bold = false;
   ovFormat.color = 0xFFFF00;
   
   lbButton.setTextFormat(ovFormat);
  }
 
  private function down_listener(evt:MouseEvent):void
  {
   //trace("down");
   var dnFormat:TextFormat = new TextFormat();
   dnFormat.bold = false;
   dnFormat.color = 0xCCCCCC;
   
   lbButton.setTextFormat(dnFormat);
  }
 
  private function up_listener(evt:MouseEvent):void
  {
   //trace("up");
   lbButton.setTextFormat(lbFormat);
   //dispatchEvent(new MouseEvent("customCLICK", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
   //dispatchEvent(evt);
  }
 
  private function out_listener(evt:MouseEvent):void
  {
   //trace("out");
   lbButton.setTextFormat(lbFormat);
  }
 
  private function draw_button():void
  {
   if(!isTargeted){
    //trace("drawing button elements");
    btnTarget.graphics.beginFill(btnColor);
    btnTarget.graphics.drawRoundRect(0, 0, 80, 20, 5);
    btnTarget.graphics.endFill();
   }
   this.addChild(btnTarget);
   addListeners();
   isAlive(true);
   addLabel();
  }
 
  private function isAlive(val:Boolean):void
  {
   //trace("Button status change");
   var rOffset:Number;
   var gOffset:Number;
            var bOffset:Number;
   if(val) {
             rOffset = 0;
             gOffset = 0;
             bOffset = 0;
   } else {
    rOffset = -125;
             gOffset = -125;
             bOffset = -125;
   }  
   btnTarget.transform.colorTransform = new ColorTransform(1, 1, 1, 1, rOffset, gOffset, bOffset);
  }
 
  private function make_toggle():void
  {
   btnTarget.removeEventListener(MouseEvent.MOUSE_OVER, over_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_OUT, out_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_UP, up_listener);
   btnTarget.removeEventListener(MouseEvent.MOUSE_DOWN, down_listener);
   
   btnTarget.addEventListener(MouseEvent.CLICK, toggle_listener);
   _toggled = false;
   
   var tgFormat = new TextFormat();
   tgFormat.bold = false;
   tgFormat.color = 0x777777;
   
   lbButton.setTextFormat(tgFormat);
  }
 
  private function toggle_listener(evt:MouseEvent):void
  {
   var tgFormat = new TextFormat();
   if(_toggled) {
    _toggled = false;
    tgFormat.bold = false;
    tgFormat.color = 0x777777;
    dispatchEvent(new MouseEvent("customOFF", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
   } else {
    _toggled = true;
    tgFormat.bold = true;
    tgFormat.color = 0xFFFF00;
    dispatchEvent(new MouseEvent("customON", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
   }
   lbButton.setTextFormat(tgFormat);
   //trace(_toggled);
  }
 }
}

한번 만들어봤습니다만.

3.0 에서는 굳이 이런식으로 만들 필요 없이 걍 SimpleButton 클래스를 사용하면 될 것 같습니다 -_-

그래도... 요녀석의 장점이라면... 그냥 쓰면 임의대로 Sprite 에서 버튼 모양을 그려준다는 겁니다.
그 버튼의 색도 지정할 수 있구요..
토글식으로 만들어 줄 수도 있습니다.
이경우에는 이벤트 리스너를 걸어줄 때 "customON", "customOFF" 라는 식으로 문자로 걸어주는거죠
뭐 저런건 걍 스태틱 클래스로 모아서 만들어줘도 됩니다만, 아직 제 라이브러리가 없어서 그냥 씁니다 ㅎ

사용법은 간단합니다.
import CustomButton.CustomButton;
// 우선은 Import 를 해줘야겠지요
// package 는 customUI.CustomButton 이지만.. 마음껏 수정하셔도 됩니당
var buttonInstance:CustomButton = new CustomButton(null, 0x000000);
// 앞에는 버튼이 될 무비클립, 요기서 아무것도 지정을 안해주면(null) 임의로 그려줍니다.
// 뒤에는 임의로 그려줄때 버튼의 색으로 쓸 uint 값 그냥 웹컬러 코드에 0x 붙는 시츄 -_-
buttonInstance.activate()
// 버튼 활성화를 해줘야 합니다.
buttonInstance.destroy()
// 버튼 비활성화 메서드
buttonInstance.setToggle(true)
// true, false 로 토글 버튼으로 쓸건지 말건지 정해줍니다


일단 동작은 잘 합니다.
충분한 테스트를 거치치 않은 미완성이긴 하지만... 공부겸 해서 올려둡니다.
,
일상놀이/심심하면 잡담놀이 2007. 10. 17. 14:44

닮은꼴 유명인 찾아보기



자신과 닮은꼴 유명인사 찾기 라는데... 전 왜 이럽니까...



사용자 삽입 이미지

OTL


사용자 삽입 이미지

흠좀무




하는곳은 이곳, 제가 이녀석을 발견한 곳은 이곳 입니다...
,
TOTAL TODAY