gihyo.jp » DEVELOPER STAGE » 連載 » ActionScript 3.0で始めるオブジェクト指向スクリプティング » 第26回 外部データの読込み待ち

ActionScript 3.0で始めるオブジェクト指向スクリプティング

第26回 外部データの読込み待ち

前回の第25回は「サウンドと画像の外部読込み」だった。そして,読込んだデータを操作するときは,そのロードが済むまで待たなければならないと述べた。今回は,その読込み待ちの処理について解説しよう。

読込んだ外部JPEGファイルの操作

まずは,前回の続きで,読込んだ外部JPEG画像ファイルを操作してみたい。このとき,ふたつ確かめなければならないことがある。第1に,ロードが済んだかどうかを,誰に訊けばいいのかということだ。第2は,読込まれた外部データは,どこに納められるのかである。

LoaderInfoクラス

読込み終わったことを知る仕組みは,原則どおりイベントリスナーを用いる。よって,誰に訊けばいいのかということは,どのインスタンスを参照してEventDispatcher.addEventListener()メソッドを呼出すのかということだ。そして,それはLoaderInfoクラスになる。

LoaderInfoインスタンスは,DisplayObject.loaderInfoプロパティでアクセスでき,そのDisplayObjectインスタンスが含まれているファイルの情報をもつ。ただし,LoaderインスタンスのDisplayObject.loaderInfoプロパティを参照すると,Loaderインスタンスは親タイムラインの表示リストに含まれるので,つまりは読込む側のファイルの情報になってしまう。

Loaderインスタンスに読込まれたコンテンツのLoaderInfoインスタンスは,Loader.contentLoaderInfoプロパティで参照する。このLoaderInfoインスタンスのLoader.completeイベント(定数Event.COMPLETE)にイベントリスナーを登録すれば,コンテンツのデータを読込み終わったことがわかる。

Loader.contentプロパティ

Loaderインスタンスにロードされたコンテンツは,Loader.contentプロパティで参照できる。プロパティ値は,読込まれたコンテンツの表示リストで最上位のDisplayObjectインスタンス(タイムライン)だ。ただし,データがロードされるまでは値はnullなので,読込み待ちが必要となる。

では,前回の宿題だったロードした外部JPEG画像の大きさを変えてみよう。LoaderインスタンスのLoader.contentLoaderInfoプロパティを参照して,Loader.completeイベントにリスナー関数を登録する。そして,読込みが終わってリスナー関数が呼出されたら,Loader.contentプロパティでコンテンツを参照して処理すればよい(スクリプト1)。

スクリプト1 外部JPEGファイルが読込まれたら画像の幅を変更する

// フレームアクション
var myLoader:Loader = new Loader();
var myRequest:URLRequest = new URLRequest("PenBitmap.jpg");
var myInfo:LoaderInfo = myLoader.contentLoaderInfo;
myInfo.addEventListener(Event.COMPLETE, xSetContent);
addChild(myLoader);
myLoader.load(myRequest);
trace(myLoader.content);   // 出力: null
function xSetContent(eventObject:Event):void {
  var myContent:DisplayObject = myLoader.content;
  trace(myContent);   // 出力: [object Bitmap]
  myContent.width = stage.stageWidth;
}

[ムービープレビュー]を確かめると,読込まれた外部JPEGファイルの画像の幅が,ステージ一杯に拡大される。また,確認用に加えたtrace()関数のステートメントによって,Loader.contentプロパティの値が,ロード前はnullであることがわかる。(JPEG)画像ファイルを読込むと,このプロパティの値はBitmapインスタンスとして認識される(図1※1)。

図1 読込まれたJPEG画像の幅が変わった

図1 読込まれたJPEG画像の幅が変わった(1)

図1 読込まれたJPEG画像の幅が変わった(2)

※1
SWFファィルをロードすれば,MovieClipインスタンスになる。

外部テキストファイルのロード

つぎは,外部テキストファイルを読込んでみよう。今回は,ロードの完了も読込んだデータも,ともにURLLoaderクラスが扱う。しかし, URLLoaderクラスはDisplayObjectクラスを継承しない。つまり,インスタンスをそのままタイムラインの表示リストに加えて表示することはできない。

テキストを表示するには,たとえばTextFieldクラスを用いる。TextFieldクラスは,DisplayObjectクラスを継承する。そして,コンストラクタで生成し,表示リストにに加えてタイムラインに配置することは,他のDisplayObjectインスタンスと変わらない。

Flashムービー(FLA)ファイルと同じ階層にある外部テキストファイル"test.txt"を読込み,ロードし終えたテキストを,ステージに配置したTextFieldインスタンスに設定するフレームアクションが,以下のスクリプト2だ(図2)。ロードの完了を伝えるイベントURLLoader.complete(定数Event.COMPLETE)で,インスタンスにロードされたテキストはURLLoader.dataプロパティで参照する(※2)。

スクリプト2 URLLoaderクラスで外部テキストファイルをロードしてTextFieldインスタンスに設定する

// フレームアクション
var _txt:TextField = new TextField();
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("test.txt");
addChild(_txt);
_txt.autoSize = TextFieldAutoSize.LEFT;
_txt.wordWrap = true;
myLoader.addEventListener(Event.COMPLETE, xSetText);
myLoader.load(myRequest);
function xSetText(eventObject:Event):void {
  _txt.text = myLoader.data;
}

図2 外部テキストファイルからロードされてTextFieldインスタンスに設定されたテキスト

図2 外部テキストファイルからロードされてTextFieldインスタンスに設定されたテキスト

TextField.autoSizeプロパティには,TextFieldAutoSizeクラスの定数を指定して,インスタンスの大きさを自動的に変えることができる。ただし,TextField.wordWrapプロパティの設定により,表1のようにインスタンスの幅または高さが調整される(図3)。

表1 Label.autoSizeとLabel.wordWrapプロパティの設定によるテキストの表示の違い

TextFieldAutoSize定数Label.wordWrapプロパティ値
falsetrue
NONE大きさは変わらず,領域を超えたテキストは表示されない。
LEFTテキストをすべて表示するように幅が右に広がる。幅は変わらず,テキストをすべて表示するように高さが下方向に広がる。
CENTERテキストをすべて表示するように幅が左右に広がる。
RIGHTテキストをすべて表示するように幅が左に広がる。

図3 Label.autoSizeとLabel.wordWrapプロパティの設定で変わるテキストの表示

Label.wordWrapプロパティ値がfalse
図3 Label.wordWrapプロパティ値がfalse

Label.wordWrapプロパティ値がtrue
図3 外部テキストファイルからロードされてTextFieldインスタンスに設定されたテキスト

※2
読込んだファイルがXMLデータの場合には,URLLoader.dataプロパティの値をXML()関数に引数として渡すことでXMLデータに変換できる。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

  • ActionScript 3.0プロフェッショナルガイド

    ActionScript 3.0プロフェッショナルガイド(毎日コミュニケーションズ)

  • ActionScript 3.0辞典 [FlashPlayer 10/9対応]

    ActionScript 3.0辞典 [FlashPlayer 10/9対応](翔泳社)

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

サクセスストーリーに続く,快適サーバー運用管理のヒント!

サーバーを自社で運用管理するのはもう限界…。データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

続・先取り! Google Chrome Extensions

2010年1月のリリースが予定されているGoogle Chrome 4に搭載されるExtensionsについて,その詳細を先取りで解説します。最新情報から,ユーザースクリプトやテーマの作り方など関連情報もお届けします。

モダンPerlの世界へようこそ

この連載では,Perlの世代間ギャップに悩んでいる方に,いくらかの背景知識と,これだけは知っておいたほうがよいという最低限の慣用句をお届けします。

Hosting Department:ホスティングを活用するための基礎知識

本連載では,ホスティングサービスを活用する上で知っておきたい基礎知識を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント