MovieClipLoderを使って画像を読み込みして使う事、よくありますよね。
でも読み込んだMCをタイムラインアニメで使用して、空白キーフレームを打つと次にそのシンボルを使うと読み込んだ画像が無くなってしまってる。
そういう時は僕はステージの外に配置して、_visibleはfalseに。
するとグラフィック面でのメモリは食わないので軽いです。
…もっとスマートな方法あるのかな??
xmlとデータをflashにとりこんで配列化してみるときに使ってみたんだけどこれが結構便利です。
これなら更新の際も便利だね。
ソースは
import org.casaframework.load.data.xml.XmlLoad;
import org.casaframework.util.XmlUtil;
import org.casaframework.util.ArrayUtil;
var swfinfo:Array;
function onDataLoad(sender:XmlLoad):Void {
//XmlUtilでXMLをパース
swfInfo = XmlUtil.xmlToObject(this.myXmlLoad.getXml())['data'][0]['items'];
//initを実行
init();
}
//XMLをロード
var myXmlLoad:XmlLoad = new XmlLoad("movies.xml");
//ロード完了時の処理
this.myXmlLoad.addEventObserver(this,XmlLoad.EVENT_LOAD_COMPLETE,"onDataLoad");
//ロード開始
this.myXmlLoad.start();
function init():Void {
//trace(swfInfo[0].movie[0].nodeValue);
//ここで配列化
var swf_array:Array = new Array();
for (i=0; i<=swfInfo[0].movie.length-1; i++) {
swf_array[i] = swfInfo[0].movie[i].nodeValue;
}
//ここでランダム化
_swf_ARR = ArrayUtil.randomize(swf_array);
trace(_swf_ARR[0]);
//ランダムにして各MCにloadClip
//全体管理用リスナー
var Listener:Object = new Object();
//ロードするswfの数
Listener.num = 7;
//ロード完了した数
Listener.count = 0;
//onLoadInit
Listener.onLoadInit = function() {
this.count++;
if (this.count>=this.num) {
this.onLoadAll();
}
};
//全てのswfをロードしたときの処理
Listener.onLoadAll = function() {
//gotoAndPlay(2);
trace("完了");
};
//ここから読み込み処理
var Loader0:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader0.addListener(Listener);
Loader0.loadClip(_swf_ARR[0],this.load0);
//ここまで
//ここから読み込み処理
var Loader1:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader1.addListener(Listener);
Loader1.loadClip(_swf_ARR[1],this.load1);
//ここまで
//ここから読み込み処理
var Loader2:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader2.addListener(Listener);
Loader2.loadClip(_swf_ARR[2],this.load2);
//ここまで
//ここから読み込み処理
var Loader3:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader3.addListener(Listener);
Loader3.loadClip(_swf_ARR[3],this.load3);
//ここまで
//ここから読み込み処理
var Loader4:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader4.addListener(Listener);
Loader4.loadClip(_swf_ARR[4],this.load4);
//ここまで
//ここから読み込み処理
var Loader5:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader5.addListener(Listener);
Loader5.loadClip(_swf_ARR[5],this.load5);
//ここまで
//ここから読み込み処理
var Loader6:MovieClipLoader = new MovieClipLoader();
//リスナー登録
Loader6.addListener(Listener);
Loader6.loadClip(_swf_ARR[6],this.load6);
//ここまで
}
っと。
xmlを解析して配列化。そしてまたrandomizeを使用して中身をランダムにするとloaderに読み込むムービーはいつでもランダム。
再生するとき、更新されたときも必ずランダム配列になってるのでなかなかいい。
ところでこの最後のところのloadClipの処理が嫌。
同じこと何度もやってる。
これを一回で出来ないかな?forを使ってとか?
やってみたけどなぜかできない、納期が迫って時間がない。。。
次は成功させるぞ!
FuseKitを使用してみて思うのはトゥイーンを配列化して同時に動くもの、最初のトゥイーンが終わって次に動くものってやつを管理しやすいのがいいところ。
でも使い勝手によってはTweenerの方がいいときがあるな。
最初に考えてからやんないとドツボにはまりそうだ。
単体の動きはTweenerの方がお手軽な感じがする。ボタンにロールオーバーするとオブジェクトがさっと動いて終わりとかね。
それでもまだまだ2.0の仕事なのでこれからもお世話になります。
FuseKitはすばらしい
いろいろとディレクターの方と話をしながらトップのflashはナビ付きか否かで考えて提案したけど結局はボツ。
まぁ、ボツになったのがイラッときたとかではなくて、構築というのは案を出しては練り直して結局、元の鞘に収まったりすることもあるので。。。
ここしばらく無いくらい考えたよ。ほんとに。
そこら辺りをこれから見極めるようになる必要を感じました。
てな訳でフツーのflashムービーだけど、ここは演出で勝負!
方針が決まったよ。それで良し。
僕の書いたアクションスクリプトはちゃんと書いてる人から見ると「ケッっ」てな感じの駄文ならぬ駄スクリプトでした。
と、いうことで、ちゃんとするにはやっぱりsubstr()ではなくてsplit()を使わないと。
前から何番目の何文字目とかではなくてまず
WIN 9,0,124,0
とバージョン情報をとって、" "で区切って配列にする。
次に","で区切って[9,0,124,0]と配列にしてその先頭の値をとる。
すると10でも20でも100でもOK
スクリプトは
myVer = System.capabilities.version;
//配列_まずは"(半角スペースで切る)"
myVer_Array = new Array();
myVer_Array =myVer.split(" ") //[win,9.0.124.0]
//9.0.124.0をmyVer_Stringに代入
myVer_String = new String();
myVer_String = myVer_Array[1]
//myVer_Stringをさらに”,”で区切る
get_ver_Array = new Array();
get_ver_Array = myVer_String.split(","); //[9,0,124,0]
//で、get_ver_Arrayの最初の値をintVerに代入
intVer = get_ver_Array[0];
trace(intVer)
と、いう感じ。
最初に書いてたのは乱暴でした。
反省。