Advertisement
angelhdz12

Drag events for Starling objects (toggle button)

Feb 4th, 2017
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import starling.display.DisplayObject;
  4.     import starling.display.Sprite;
  5.     import starling.display.graphics.RoundedRectangle;
  6.     import starling.display.materials.FlatColorMaterial;
  7.     import starling.display.materials.TextureMaterial;
  8.     import starling.events.Touch;
  9.     import starling.events.TouchEvent;
  10.     import starling.events.TouchPhase;
  11.     import starling.filters.DropShadowFilter;
  12.     import starling.text.TextField;
  13.     import starling.text.TextFormat;
  14.     import starling.textures.Texture;
  15.     /**
  16.      * ...
  17.      * @author Angel Hdz
  18.      */
  19.     public class ToggleButton extends Sprite
  20.     {
  21.         public var padding:Number = 6;
  22.         private var bg:RoundedRectangle;
  23.         private var button:RoundedRectangle;
  24.         private var onTxt:TextField;
  25.         private var offTxt:TextField;
  26.         private var _enabled:Boolean;
  27.         private var dragging:Boolean;
  28.  
  29.         public function ToggleButton()
  30.         {
  31.             super();
  32.             this._enabled = true;
  33.            
  34.             //Textfields
  35.             this.onTxt = new TextField(200, 36, "ON", format({"bold": "true", "font": "Verdana", "size": "26", "horizontalAlign": "left", "color": "0xffffff"}));
  36.             this.offTxt = new TextField(200, 36, "OFF", format({"bold": "true", "font": "Verdana", "size": "26", "horizontalAlign": "left", "color": "0x002233"}));
  37.             this.onTxt.x = 12;
  38.             this.offTxt.x = 82;
  39.             this.onTxt.y = this.offTxt.y = 13;
  40.            
  41.             //Background
  42.             this.bg = new RoundedRectangle(150, 50, 1, 1, 1, 1);
  43.             this.bg.x = this.bg.y = this.padding;
  44.             bg.material = new FlatColorMaterial(0x009DD4);
  45.             this.button = new RoundedRectangle(80, 62);
  46.             this.button.material = new FlatColorMaterial(0xFF3A0D);
  47.             this.button.x = 76;
  48.             this.button.filter = new DropShadowFilter(2, 0.785, 0, 1);
  49.            
  50.             //Add to stage
  51.             this.addChild(bg);
  52.             this.addChild(this.onTxt);
  53.             this.addChild(this.offTxt);
  54.             this.addChild(button);
  55.            
  56.             //Add listeners
  57.             this.button.addEventListener(TouchEvent.TOUCH, this.onTouch);
  58.         }
  59.        
  60.         private function onTouch(event:TouchEvent):void
  61.         {
  62.             var target:RoundedRectangle = RoundedRectangle(event.currentTarget) || null;
  63.             var touch:Touch = event.getTouch(event.currentTarget as DisplayObject) || null;
  64.  
  65.            
  66.             if (target && touch)
  67.             {
  68.                 var posX:Number = touch.globalX - (target.width / 2);
  69.  
  70.                 switch(touch.phase)
  71.                 {
  72.                     case TouchPhase.BEGAN:
  73.                         this.dragging = true;
  74.                         break;
  75.                        
  76.                     case TouchPhase.ENDED:
  77.                         this.dragging = false;
  78.                         if (touch.globalX > (this.bg.x + (this.bg.width / 2)))
  79.                         {
  80.                             target.x = (this.bg.x + this.bg.width + this.padding) - target.width;
  81.                             this.enabled = true;
  82.                         }
  83.                         else
  84.                         {
  85.                             target.x = this.bg.x - this.padding;
  86.                             this.enabled = false;
  87.                         }
  88.                         break;
  89.                        
  90.                     case TouchPhase.MOVED:
  91.                         if (this.dragging)
  92.                         {
  93.                             target.x = (posX > (this.bg.x - this.padding) && touch.globalX < (this.bg.x + this.bg.width + this.padding - target.width/2)) ? posX : target.x;
  94.                             //target.y = touch.globalY - (target.height/2);
  95.                         }
  96.                         break;
  97.                 }
  98.             }
  99.         }
  100.        
  101.         private function format(value:Object):TextFormat
  102.         {
  103.             var f:TextFormat = new TextFormat();
  104.                    
  105.             for (var i:String in value)
  106.             {
  107.                 f[i] = value[i];
  108.             }
  109.             return f;
  110.         }
  111.        
  112.         /**
  113.          * Toggles the button ON or OFF
  114.         */
  115.         public function set enabled(value:Boolean):void
  116.         {
  117.             this._enabled = value;
  118.             this.update();
  119.         }
  120.        
  121.            
  122.         /**
  123.          * Toggles the button ON or OFF
  124.         */
  125.         public function get enabled():Boolean
  126.         {
  127.             return this._enabled;
  128.         }
  129.        
  130.         private function update():void
  131.         {
  132.             trace(this.enabled);
  133.         }
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement