ActionScript 3.0 Design Patterns

(Chris Devlin) #1

220 | Chapter 6: Composite Pattern


10 private var sName:String;
11 private var song:Sound;
12 private static var soundChannel:SoundChannel = new SoundChannel( );
13 private static var aSongQueue:Array = [];
14 private static var songPlayingFlag:Boolean = false;
15
16 public function Song(sName:String)
17 {
18 this.sName = sName;
19 }
20
21 override public function play( ):void
22 {
23 var request:URLRequest = new URLRequest
("music/" + sName);
24 song = new Sound( );
25 song.addEventListener(Event.COMPLETE, songLoaded);
26 song.addEventListener(IOErrorEvent.IO_ERROR, loadError);
27 song.load(request);
28 }
29
30 private function songLoaded(event:Event):void
31 {
32 aSongQueue.push(song);
33 playIfIdle( );
34 }
35
36 private function loadError(event:Event):void
37 {
38 trace("Error loading song " + this.sName);
39 }
40
41 private function playDone(event:Event):void
42 {
43 songPlayingFlag = false;
44 playIfIdle( );
45 }
46
47 private function playIfIdle( ):void
48 {
49 if (!songPlayingFlag)
50 {
51 var s:Sound = aSongQueue.shift( );
52 if (s)
53 {
54 songPlayingFlag = true;
55 trace("playing " + s.id3.songName);
56 // from ID3 tag
57 soundChannel = s.play( );

Example 6-10. Song.as

Free download pdf