自動でネギ振りその2
ちょっと任意タン(だっけ?)みたいのを研究室で作ろうってことで、とりあえずはちゅねを作成したので、せっかくなので、ネギをまた振らせてみました。
http://moeten.info/flex/20080501_hatyune/bin-release/main.html
今回のポイントとして、エフェクトプレイ中は再度エフェクトをプレイさせない方法です。
if( !r1.isPlaying ) r1.play();
これでエフェクト中に再度エフェクトの呼び出しがされないので、回転エフェクトなどですっ飛んで行くことを防ぐことができます。
ソースコードはこちら。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FF9D9D]" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import mx.effects.easing.*; //初期化関数 private function init():void{ myFlv.play(); this.addEventListener(Event.ENTER_FRAME , soundGraphe ); } //アクション private function myRotate():void{ if( !r1.isPlaying ) r1.play(); if( !r2.isPlaying ) r2.play(); if( !r3.isPlaying ) r3.play(); if( !r4.isPlaying ) r4.play(); } //サウンドヒストグラム作成 import mx.collections.ArrayCollection; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.ByteArray; private var nowPlay:Boolean; private var bytes:ByteArray = new ByteArray(); private var spectrum:Array = new Array(256); public function soundGraphe(e:Event):void{ SoundMixer.computeSpectrum(bytes, true, 0); //ヒストグラム用変数作成 for (var i:int = 0; i < 256; ++i) { spectrum[i] = bytes.readFloat(); } var linedata:ArrayCollection = new ArrayCollection(); var values:Array = new Array(); for (var x:int = 0; x < 256; ++x) { linedata.addItem({ "color" : x , "sum": spectrum[x] / 300 } ); //ネギ振るか判定 if( spectrum[x] != 0 && x >= 100 ){ if( ! nowPlay ){ myRotate(); } } } linedata.addItem({"color":0,"sum":0.008}); //チャートに代入 spec.dataProvider = linedata; } ]]> </mx:Script> <!-- ############### アクション ############## --> <mx:Rotate id="r1" target="{kami_migi}" angleFrom="10" angleTo="0" originX="100" originY="0" easingFunction="Back.easeOut" duration="400"/> <mx:Rotate id="r2" target="{kami_hidari}" angleFrom="-10" angleTo="0" originX="10" originY="10" easingFunction="Back.easeOut" duration="400"/> <mx:Rotate id="r3" target="{ude_migi}" angleFrom="-50" angleTo="0" originX="300" originY="250" easingFunction="Back.easeOut" duration="400"/> <mx:Rotate id="r4" targets="{[naruto1,naruto2]}" angleFrom="360" angleTo="0" originX="22" originY="22" repeatCount="0" duration="7000"/> <!-- ############### 音声用 ############## --> <mx:VideoDisplay id="myFlv" x="10" y="10" width="403" height="287" source="miku.flv" visible="false"/> <!--ヒストグラム--> <mx:ColumnChart x="10" y="347" id="spec" height="191" width="380"> <mx:series> <mx:ColumnSeries xField="color" yField="sum" displayName="Gold"/> </mx:series> </mx:ColumnChart> <!-- ############### はちゅね ############## --> <mx:Image x="267" y="52" id="kami_migi" source="hatyune/kami_migi.png"/> <mx:Image x="166" y="20" id="ude_migi" source="hatyune/ude_migi.png"/> <mx:Image x="354" y="31" id="karada" source="hatyune/karada.png"/> <mx:Image x="507" y="160" id="naruto1" source="hatyune/naruto.png"/> <mx:Image x="378" y="150" id="naruto2" source="hatyune/naruto.png"/> <mx:Image x="380" y="93" id="kao" source="hatyune/kao.png"/> <mx:Image x="534" y="42" id="kami_hidari" source="hatyune/kami_hidari.png"/> </mx:Application>