トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

テキストファイルを読み込み_Flex

テキストファイルを読み込み

swfから外部のテキストファイルを読み込みます。データなどを分離してテキストで扱い、それをその都度読み込むのに使えます(ゲームで言えばマップデータとかキャラクタの配置位置とか)。

import flash.events.*;
import flash.net.*;

の記述がasファイルの先頭のほうで必要となります。

セキュリティの設定について(いずれは別ページに記載する予定)

外部ファイルを扱う場合はセキュリティの設定が必須になります。

Flash Player セキュリティについての記述

http://livedocs.adobe.com/flex/3_jp/html/help.html?content=05B_Security_01.html

ローカル環境にて外部ファイル読み込みを有効にする場合について記載します。

Windowsの場合

C:\windows\system32\Macromed\Flash

の位置(Windowsディレクトリは環境によって違うのでその都度変えるようにしてください)に「FlashPlayerTrust」というディレクトリを作成します。このディレクトリ内に「local.cfg(cfg拡張子であればファイル名はなんでもよい)」を作って、

信頼するローカルのディレクトリを1行に1つ、フルパスで記載します。

C:\temp\flash

とした場合は「C:¥temp¥flash」内のswfが外部ファイル(ここではテキストファイル)を読み込むのを有効にします。

Mac OS Xの場合

/Library/Application Support/Macromedia/

の位置に「FlashPlayerTrust」というディレクトリを作成します。このディレクトリ内に「local.cfg(cfg拡張子であればファイル名はなんでもよい)」を作って、

信頼するローカルのディレクトリを1行に1つ、フルパスで記載します。

/Users/hoehoe/flash

とした場合は「/Users/hoehoe/flash」内のswfが外部ファイル(ここではテキストファイル)を読み込むのを有効にします。

外部テキストファイルの読み込み

例として「TextLoadTest.as」ファイルを以下のように作成します。ここでは同一ディレクトリ上の「test.txt」を読み込んでいます。なお、「test.txt」はUTF-8で記述するようにします。

package {
   import flash.display.*;  
   import flash.text.*;  
   import flash.events.*;
   import flash.utils.*;
   import flash.net.*;

   public class TextLoadTest extends Sprite {
       private var m_text:TextField;           ///< テキスト表示用
       private var m_loader:URLLoader;         ///< テキストファイル読み込み用
       
       public function TextLoadTest() {
           m_text = new TextField();
           m_text.text = "";
                       
           // 表示位置の指定
           m_text.x = 8;
           m_text.y = 8;
           m_text.multiline  = true;      // 複数行表示
           m_text.autoSize   = "left";     // 動的にテキストフィールドのサイズを変える
           addChild(m_text);               // ルートのSpriteにオブジェクトを追加
           
           // XMLファイルの読み込み
           var request:URLRequest = new URLRequest("test.txt");
           m_loader = new URLLoader();

           // 読み込み完了/エラーイベントの指定
           m_loader.addEventListener(Event.COMPLETE, onSuccessLoader);
           m_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onErrorSecurity);
           m_loader.addEventListener(IOErrorEvent.IO_ERROR, onErrorLoader);
           
           // 読み込み開始
           m_loader.load(request);
           
           /**
            * 読み込み成功時に呼ばれるイベント
            */
           function onSuccessLoader(event:Event) : void {
               m_text.text = "読み込みに成功!\n" + String(m_loader.data);
           }

           /**
            * 読み込み失敗(セキュリティ関連のエラー)呼ばれるイベント
            */
           function onErrorSecurity(event:Event) : void {
               m_text.text = "セキュリティエラー!!";
           }
           
           /**
            * 読み込み失敗時に呼ばれるイベント
            */
           function onErrorLoader(event:Event) : void {
               m_text.text = "読み込み失敗!";
           }
       }
   }
}

テキストの読み込み

var request:URLRequest = new URLRequest("test.txt");
m_loader = new URLLoader();

として、URLRequestの引数に対象のテキストファイル名を入れます。

// 読み込み完了イベントの関数登録
m_loader.addEventListener(Event.COMPLETE, onSuccessLoader);

// セキュリティエラーが起こった場合のイベント関数の登録
m_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onErrorSecurity);

// 読み込みに失敗した場合のイベント関数の登録
m_loader.addEventListener(IOErrorEvent.IO_ERROR, onErrorLoader);

読み込み自体は成功しても失敗してもイベント関数を呼び出すことになります。

          
// 読み込み開始
m_loader.load(request);

にて読み込みを開始します。この処理はすぐに抜けて次の行に進みます。

読み込みが成功した場合は、上記のように登録したonSuccessLoader関数が呼ばれます。

function onSuccessLoader(event:Event) : void {
   m_text.text = "読み込みに成功!\n" + String(m_loader.data);
}

URLLoaderとして生成したm_loaderのdataに読み込んだ文字列が格納されています。テキストはあらかじめコンマや改行で区切ったものをパースして扱うとよいでしょう。

var dataA:Array;
dataA = m_loader.data.split(/\r\n|\r|\n|,/);

のようにすると、配列dataAに対して「¥r¥n」「¥r」「¥n」「,」を分割の区切りとして分けて格納されます。split関数の引数は正規表現ですのでダブルクォーテーションにて囲まないようにします。

たとえばtest.txt内にて以下のように記述されているとします。

1,2,3,4
2行目

これを読み込んで上記のsplitで分解した場合は、「1」「2」「3」「4」「2行目」という文字列が入ります。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.