外部ファイルの読み込み


外部にあるファイルを読み込んで Flash で表示する事ができます。

■「アクション」を使って、手軽に読み込む

この方法で読み込めるファイルは、『swf』と『jpg』の2種類です。

ParaFla! の場合はイベントリストで「アクションを挿入」して、「URLを取得」を選択します。
Suzuka の場合はレイヤーリストで「アクションレイヤーを挿入」、「簡易モード」にチェックを入れて「URLを取得」を選択します。
『URL』と『ターゲット』のふたつの欄が表示されるので、『URL』には読み込みたいファイルのパス(URL)、『ターゲット』には「_level1」と記述します。
複数のファイルを読み込む場合は、その数に応じて「_level2」、「_level3」、… のように数字を増やしていきます。
ファイルのパスは以下のように記述します。

フルパス(絶対パス)で記述 http://www.example.jp/image/test.jpg
相対パスで記述 ./image/test.jpg
ローカルのファイルを記述 file:///C:/document/test.swf

読み込んだファイルは、(x, y) = (0, 0)に表示され、「_level1」の数が大きいほど深度が上となり、手前に表示されます。
常にメインイベントの上に表示されるので、スプライトなどに読み込むことはできません。

■ ActionScript の『loadMovie』を使って読み込む

この方法で読み込めるファイルも、『swf』と『jpg』の2種類です。
フレームアクションなどで、以下のように記述します。

loadMovie("読み込みたいファイルのパス", "読み込む階層");
    -- または --
読み込む階層.loadMovie("読み込みたいファイルのパス");

ファイルパスの記述方法はアクションの時と同様です。

スプライト『 load 』に読み込む loadMovie("http://www.example.jp/image/test.jpg", "_root.load");
_level1”に読み込む loadMovie("http://www.example.jp/image/test.jpg", "_level1");

_root』に直接読み込むと動作が不安定になるらしいので、スプライトの中に読み込むようにしてください。

■ ActionScript の『loadVariables』を使って読み込む

この方法では、『txt』ファイル(に記述した変数のデータ)が読み込めます。

loadVariables("テキストファイルのパス", "読み込む階層");
    -- または --
読み込む階層.loadVariables("テキストファイルのパス");

テキストファイルは以下のような形式で変数のデータを記述します。

tx=テスト&num=150&contents=7個

例えば上記のテキストファイルを読み込んだとすると、
読み込んだ階層に以下のように変数が作られ、値が代入されます。

変数名 代入される値
tx テスト
num 150
contents 7個

データを読み込んだときに全角文字が文字化けしてしまう場合は、データを読み込む前に以下のスクリプトを記述しておきます。

System.useCodepage = true;

これで文字化けしなくなります。

System.useCodepage について
難しいので読み飛ばしても構いません。
実は、単純に「文字化けしたらSystem.useCodepage = trueすればいい」というわけではありません。
System.useCodepageとは、読み込んだテキストを Flash 内で解析するときの文字コードにUnicode(UTF-8 など)を使用する(false)か、
FlashPlayer を実行しているシステムのデフォルトのコードページを使用する(true)かを指定するものです。
日本語のパソコンの場合、デフォルトのコードページは大抵Shift-JISなので、
文字コードにShift-JISを使用したテキストファイルを読み込む場合はSystem.useCodepagetrueを指定すればいいわけです。
(ただし、英語のパソコンで閲覧した場合デフォルトのコードページはCP1252なので、Shift-JISを使用したテキストファイルは正常に表示できなくなります。)
逆に、文字コードにUnicode(UTF-8 など)を使用したテキストファイルを読み込む場合はSystem.useCodepagefalseに指定してください。
文字コードは、テキストファイルを編集する際に使用するテキストエディターで変更できるはずです。
例えば、Windows 付属のメモ帳の場合、文章の保存先を指定するダイアログボックスの下部で文字コードを指定できます。「ANSI」で保存した場合がShift-JISなので、trueに指定してください。
これらのことを考えると、パソコンの言語によってコードページがころころ変わってしまうSystem.useCodepage = trueは、どうしてもというとき以外はあまり使用しないほうがいいのかもしれません。

ちなみに、数値を記述して読み込んでも『文字列としての数字の文字』として解釈されてしまうので、
数値として解釈させたい時は以下のようにして、文字列から数値に変換します。

parseFloat(); 引数に指定した文字列の数字を、数値に変換

これを使わずに四則演算させようとすると、["30" + 1](文字列の30+数字の1)のように解釈され、この場合結果が「301」となってしまいます。


どの方法で読み込むにしても、読み込みが完了するまではそのデータは使用できません。
読み込んだデータを ActionScript などで利用したい場合、「onClipEvent(data){}」、「onData」イベントハンドラを使うと楽です。
このイベントハンドラは、データを読み込み終わったときに一度だけ実行されます。
データを別々に何回も読み込んだときは、それぞれ読み込みが終わった時に一回ずつ実行されます。

//フレームアクション
loadMovie("./test.jpg", "_root.map");
--------------------------------------------------------------------------------
//スプライト「_root.map」のクリップアクション
onClipEvent(load){
        //×:loadMovie("./test.jpg", "this");
        //クリップアクションの loadMovie で自分自身に読み込むことはできないので、ここに記述することはできない。
        //そのため、フレームアクションに記述している。
}
-
onClipEvent(data){
        trace("test.jpg - ok");
}

_root.testspr.loadVariables("textfile.txt");
_root.testspr.onData = function(){
        trace("textfile.txt - ok");
};

onData イベントハンドラが動作するのは loadVariables で変数を読み込んだ時のみなので注意してください。
loadMovie で onData イベントハンドラが動作しないのは、 loadMovie でファイルを読み込んだ際に、そのスプライトに設定されているイベントハンドラが全てクリアされてしまうからです。
onClipEvent(data) ならば loadVariables 、 loadMovie のどちらを使用した場合でも動作します。


テキストファイルに記述された変数ではなく、テキストファイルの内容自体を読み込みたい場合は、以下のようにすることで読み込むことができます。

loadtxt = new LoadVars();
loadtxt.load("textfile.txt");
loadtxt.onData = function(file_data){
        if(file_data != null){
                trace(file_data);
        }else{
                trace("読み込み失敗");
        }
};

データの読み込みについてはFlashゲーム講座&ASサンプル集【ファイルの読み込みについて】が参考になります。


トップページに戻る