1+ package com.hendrix.feathers.controls.flex
2+ {
3+
4+ import flash.media.Sound ;
5+ import flash.utils.getQualifiedClassName ;
6+
7+ import starling.core.Starling ;
8+ import starling.display.DisplayObject ;
9+ import starling.display.MovieClip ;
10+ import starling.events.Event ;
11+ import starling.events.Touch ;
12+ import starling.events.TouchEvent ;
13+ import starling.events.TouchPhase ;
14+
15+ /**
16+ * a <code >Button</code > with a <code >MovieClip</code > skin.
17+ *
18+ * <lu >
19+ * <li />you can listen to <code >MovieClipButton.ANIMATION_FINISHED</code > event.
20+ *
21+ * @author Tomer Shalev
22+ *
23+ */
24+ public class MovieClipButton extends FlexButton
25+ {
26+ /**
27+ * Event for Dropping the this button
28+ */
29+ public static const ANIMATION_FINISHED : String = "ANIMATION_FINISHED" ;
30+ [Event (name="ANIMATION_FINISHED" , type="starling.events.Event" )]
31+
32+ private var _mc_skin : MovieClip = null ;
33+ private var _up_skin : FlexImage = null ;
34+ private var _sound : Sound = null ;
35+
36+ public function MovieClipButton (mc : MovieClip , sound :Sound = null )
37+ {
38+ super ();
39+
40+ _mc_skin = mc;
41+ _sound = sound ;
42+ }
43+
44+ override protected function feathersControl_addedToStageHandler (event :Event ):void
45+ {
46+ super . feathersControl_addedToStageHandler(event);
47+
48+ addEventListener (TouchEvent. TOUCH , touchHandler);
49+ }
50+
51+ override protected function feathersControl_removedFromStageHandler (event :Event ):void
52+ {
53+ super . feathersControl_removedFromStageHandler(event);
54+
55+ Starling. juggler. remove (_mc_skin );
56+
57+ removeEventListener (TouchEvent. TOUCH , touchHandler);
58+ _mc_skin . removeEventListener (Event . COMPLETE , mc_onComplete);
59+ }
60+
61+ override protected function initialize ():void
62+ {
63+ super . initialize ();
64+
65+ if (_sound != null )
66+ _mc_skin . setFrameSound(0 , _sound );
67+
68+ super . downSkin = _mc_skin ;
69+
70+ _up_skin = new FlexImage();
71+ _up_skin . scaleMode = FlexImage. SCALEMODE_STRECTH ;
72+ _up_skin . source = _mc_skin . getFrameTexture(0 );
73+
74+ super . defaultSkin = _up_skin ;
75+
76+ _mc_skin . addEventListener (Event . COMPLETE , mc_onComplete);
77+
78+ _mc_skin . stop ();
79+
80+ Starling. juggler. add (_mc_skin );
81+ }
82+
83+ private function btnPlay_onTriggered (event :Event ):void
84+ {
85+ _mc_skin . play ();
86+ }
87+
88+ private function btnStop_onTriggered (event :Event ):void
89+ {
90+ _mc_skin . stop ();
91+ }
92+
93+ override protected function draw ():void
94+ {
95+ super . draw ();
96+ }
97+
98+ override public function dispose ():void
99+ {
100+ super . dispose ();
101+ }
102+
103+ override public function set defaultSkin (value :DisplayObject ):void
104+ {
105+ throw new Error ("Not Supported for " + getQualifiedClassName(this ));
106+ }
107+ override public function set downSkin (value :DisplayObject ):void
108+ {
109+ throw new Error ("Not Supported for " + getQualifiedClassName(this ));
110+ }
111+ override public function set upSkin (value :DisplayObject ):void
112+ {
113+ throw new Error ("Not Supported for " + getQualifiedClassName(this ));
114+ }
115+
116+ private function touchHandler (event : TouchEvent = null ):void
117+ {
118+ if (event == null )
119+ return ;
120+
121+ var touch: Touch = event. getTouch(stage );
122+
123+ if (touch== null )
124+ return ;
125+
126+ if (touch. phase == TouchPhase. BEGAN ) {
127+ _mc_skin . currentFrame = 0 ;
128+ _mc_skin . loop = false ;
129+ _mc_skin . play ();
130+ trace ("begin playing" );
131+ }
132+ else if (touch. phase == TouchPhase. ENDED ) {
133+ _mc_skin . stop ();
134+ trace ("stopped playing" );
135+ }
136+
137+ }
138+
139+ private function mc_onComplete (event : Event ):void
140+ {
141+ trace ("MovieClipButton.mc_onComplete" );
142+ _mc_skin . stop ();
143+
144+ dispatchEventWith(ANIMATION_FINISHED );
145+ }
146+
147+ }
148+
149+ }
0 commit comments