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で取り上げてほしいネタは?

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

その他の連載

はじめMath! Javaでコンピュータ数学

プログラミング言語入門者向けに,知っていると役立つ数学的トピックスを紹介します。簡単な演習問題と解説で,即活用できる知識を目指します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

教科書には載っていない ネットワークエンジニアの実践技術

ネットワークエンジニア,インフラエンジニアのトラブル対応には,時には「教科書通りにいかない」テクニックが必要となります。資格試験では得られないこうした実践的な技術について,実例を元に紹介します。

Googleケータイ,世に現る

2008年9月,Googleが中心となって開発されている「Android」を採用した携帯電話「T-Mobile G1」が発表されました。本連載ではT-Mobile G1を中心にGoogleケータイに迫ります。

モバゲーオープンプラットフォームに挑戦!――面白法人カヤック流モバゲーオープンプラットフォーム企画と開発のイロハ

2010年1月にリリースとなったモバゲーオープンプラットフォーム。その制作企業であるカヤックが,アイデアを企画に落とし込み,開発までのノウハウを紹介します。

プロトタイピングツールSketchFlowを用いた,Silverlightアプリ開発

SketchFlowプロトタイプ作成からアプリケーション開発までをExpression Blend 3を使って実践的に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

玩式草子─ソフトウェアとたわむれる日々

Plamo Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。

連載一覧

gihyo.jp

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

書籍案内

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

定期刊行物一覧

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

最近のコメント