root/as3/SiOPM/trunk/samples/Tutorials/EventTrigger.as

リビジョン 2697, 2.2 kB (コミッタ: keim, コミット時期: 3 年 前)

サウンドライブラリ SiON ver0.5.3 更新 tutrial 追加など

Line 
1 // Sample for event trigger
2 package {
3     import flash.display.*;
4     import flash.events.*;
5     import org.si.sion.*;
6     import org.si.sion.events.*;
7    
8    
9     public class EventTrigger extends Sprite {
10         // driver
11         public var driver:SiONDriver = new SiONDriver();
12        
13         // MML data
14         public var mainMelody:SiONData;
15
16        
17         // constructor
18         function EventTrigger() {
19             // compile with event trigger command (%t)
20             mainMelody = driver.compile("%t0,1,1 t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");
21            
22             // listen triggers
23             driver.addEventListener(SiONTrackEvent.NOTE_ON_FRAME,  _onNoteOn);
24             driver.addEventListener(SiONTrackEvent.NOTE_OFF_FRAME, _onNoteOff);
25             addEventListener("enterFrame", _onEnterFrame);
26            
27             // play main melody
28             driver.play(mainMelody);
29         }
30        
31        
32         // This event dispatched when note on
33         private function _onNoteOn(e:SiONTrackEvent) : void {
34             _createNoteShape(e.note);
35         }
36        
37        
38         // This event dispatched when note off
39         private function _onNoteOff(e:SiONTrackEvent) : void {
40         }
41        
42        
43         // create shape
44         private function _createNoteShape(noteNumber:int) : Shape {
45             var shape:Shape = new Shape();
46             shape.graphics.beginFill([0xff8080, 0x80ff80, 0x8080ff, 0xffff80][int(Math.random()*4)]);
47             shape.graphics.drawCircle(0, 0, Math.random()*20+10);
48             shape.graphics.endFill();
49             shape.x = (noteNumber - 60) * 30 + 100;
50             shape.y = 300;
51             addChild(shape);
52             return shape;
53         }
54        
55        
56         // on each frame
57         private function _onEnterFrame(e:Event) : void {
58             var imax:int = numChildren;
59             for (var i:int=0; i<imax; i++) {
60                 var child:DisplayObject = getChildAt(i);
61                 child.y -= 2;
62                 child.alpha *= 0.98;
63                 if (child.y < -30 || child.alpha < 0.1) {
64                     removeChild(child);
65                     imax--;
66                     i--;
67                 }
68             }
69         }
70     }
71 }
72
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。