|
LoadVars.loadメソッド に続いては,MovieClip.loadMovieメソッド です。
とりあえずはサンプルから。(ゲーム機のような絵ですが,ゲームではありません。)
サンプル作成に使用した ParaDraw のバージョンは Ver.0.3a4, Suzuka のバージョンは Ver. 0.7.4.1[RichEdit版] です。
右にある 「←」と「→」ボタンで 外部JPEG が順次ロードされます。
ゲーム機みたいな本体部分は ParaDraw で書きましたが,ロードされる JPEG は,何かの付録として付いてきた Photoshop Elements 2.0 で適当に作成したもので,ParaDraw とも Suzuka とも Flash とも関係ありません。
また,左には 「十字キー」風ボタン がありますが,これは loadMovie とは関係がありません。
『「十字キー」風ボタン も Suzuka で作れるなぁ...。』 と思って作ってみただけで,一応ロードしたJPEGの明暗を変えられますが,単に作ってみた遊びのかざりのようなものです。
loadMovie には,グローバルな loadMovie関数 と MovieClip.loadMovieメソッド がありますが,Suzuka を使うのでしたら,古い関数にこだわる必要もないと思いますし,MovieClip.loadMovieメソッド の方が使い易いと思います。
MovieClip はスプライトをレイヤーに配置したものと同じですから,
「スプライトインスタンス.loadMovie("外部ファイル");」
という形が基本型です。これが理解できれば,それで OK だと思います。
外部ファイルは SWF と 普通のJPEG がロード可能で,SWF8 以上を作成する場合,静止GIF,PNG,プログレッシブJPEGのロードも可能です。
「アニメーションGIF もロードできないし,FLVもロードできないのに,なぜ loadMovie?」
と思われるかもしれませんが,loadMovie の Movie は本来 SWF を指しています。loadMovie が登場した Flash3 では SWF しかロードできませんでした。だから loadMovie なのです。
上のサンプルのアクションスクリプトの本体は 右にある「←」と「→」ボタン に書いてあります。
まず,メインの アクションレイヤー に n = -1; とだけ変数 n の初期値だけを用意しておいて,
「→」ボタン には次のように書いています。
on(release){
// 変数 n が 4 未満であれば
if(n<4){
// n に 1 を加算
n++;
// それ以外は
}else{
// n を 0 にする
n=0;
}
// load_mc に 外部 JPEG を読み込む
load_mc.loadMovie("kiso2/img" + n + ".jpg");
// テキストフィールド に枚数を代入
my_txt.text = n+1+"/5";
}
|
「←」ボタン には次のように書いています。
on(release){
// 変数 n が 0 より大きければ
if(n>0){
// n から 1 を減算
n--;
// それ以外は
}else{
// n を 4 にする
n=4;
}
// load_mc に 外部 JPEG を読み込む
load_mc.loadMovie("kiso2/img" + n + ".jpg");
// テキストフィールド に枚数を代入
my_txt.text = n+1+"/5";
}
|
// load_mc に 外部 JPEG を読み込む
load_mc.loadMovie("kiso2/img" + n + ".jpg");
この,「スプライトインスタンス.loadMovie("外部ファイル");」が,
MovieClip.loadMovieメソッド の本来の形で,その他が "外部ファイル" の部分をボタンをクリックするたびに動的に変えるしくみです。
LoadVars.load も loadMovie も,読み込むファイルのファイルパスは,SWFからのパスではなく,SWF を貼り付けて表示させた HTML からのパスになりますので,SWF と HTML を別フォルダに用意する場合は注意してください。
これだけではあまり面白味がないので,LoadVars.loadメソッド と MovieClip.loadMovieメソッド とを連動させたのが次のサンプルです。
と言っても,見かけ上の動作は最初のものと全く変わりません。変わらないのも何ですから,見た目の色だけは変えましたが,色は本題と全く関係がありません。
見かけ上の動きは最初のものと同じですが,スクリプトは全然違います。
// カウント用変数 cnt の初期化
cnt = -1;
// →ボタン と ←ボタン を無効にする
r_btn.enabled = false;
l_btn.enabled = false;
//
// LoadVarsクラスのインスタンスを作成
myLV = new LoadVars();
// インスタンスに外部テキストがロードされたときの動作
myLV.onLoad = function(Seikou) {
// ロードに成功すれば
if(Seikou){
// →ボタン と ←ボタン を有効にする
r_btn.enabled = true;
l_btn.enabled = true;
}
};
// インスタンスに外部テキストをロード
myLV.load("kiso2/data.txt");
//
// →ボタン をクリックしたときの動作を定義
r_btn.onRelease = function() {
// もし cnt が myLV の n-1 未満であれば
if (cnt<Number(myLV.n)-1) {
// cnt の値に 1 を加算
cnt++;
} else {
// それ以外は cnt の値を 0 に戻す
cnt = 0;
}
// load_mc に pic? の ファイルをロード
load_mc.loadMovie(myLV["pic"+cnt]);
// my_txt に枚数を表示
my_txt.text = cnt+1+"/"+Number(myLV.n);
};
// ←ボタン をクリックしたときの動作を定義
l_btn.onRelease = function() {
// もし cnt が 0 より大きければ
if (cnt>0) {
// cnt の値から 1 を減算
cnt--;
} else {
// それ以外は cnt の値を myLV の n-1 にする
cnt = Number(myLV.n)-1;
}
// load_mc に pic? の ファイルをロード
load_mc.loadMovie(myLV["pic"+cnt]);
// my_txt に枚数を表示
my_txt.text = cnt+1+"/"+Number(myLV.n);
};
|
ボタンにスクリプトを書くとややこしいので,今回の場合はボタンにインスタンス名を付けて,関連部分はすべてスクリプトレイヤーのフレームに記述しました。
また,一応外部テキストの文字コードは UTF-8 で保存しています。
このように, LoadVars を 組み合わせると,外部テキストから Flash にロードするファイルも操作することが可能になります。
このサイトのフォトアルバムは XML を使用していますが,XMLデータを使わずに,上のような 変数=値 という形のテキストデータを使って LoadVars で読み込んでも作成可能です。
フォトアルバムの場合は,データが2次元的なものなので XML を使用してみただけです。
|