目下「ActionScript 3.0 を頑張って覚えようキャンペーン」を開催中なのですが、さっそくつまづいたのでメモ。
外部ファイルのテキストを読み込んで、テキストフィールド(TextField)に表示しようとしたときのこと。
表示エリアのサイズは決まっているので、はみ出す分に関しては UIScrollBar でスクロールバーを導入することにしました。
が、その UIScrollBar には、ちゃんと働いてもらうためのちょっとしたクセみたいなものがあったのです。
というお話。
外部テキストファイルの読み込み
外部ファイルを読み込むスクリプトはいたってシンプル。
たぶんどこを探しても大体同じだと思うのですが、一応載せておきます。
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadComplete);
loader.load(new URLRequest("test.txt"));
function loadComplete(evt:Event):void {
output_txt.text = evt.target.data;
}
「test.txt」というテキストファイルの読み込みが終わったら、その中身をインスタンス名が「output_txt」というテキストフィールドに入れなさい、という意味ですね。
ちょっと回りくどい書き方ですけど、まぁ単語の意味とかを考えれば分かると思います。
で、ムービープレビューでちゃんと動作したので、いざパブリッシュをしてみたところ……。
スクロールバーが無反応な理由とその対策
テキストは読み込めていたものの、スクロールバーが反応してくれません(Desabled状態になっている)。
そこでいったん外部ファイルは使わずに、直接テキストをスクリプト内に書き込んでみました。
すると、スクロールバー反応。
ということは、やはり外部ファイルを読み込んでいることに原因があるらしい。
ということが分かったので、そのあたりを重点的にググってみました。
で、見つけたのがこちら↓の記事。
»[AS3] TextFieldの罠(UIScrollBar編) - initialize
シンプルな解説で分かりやすいですね。
要は、外部ファイルを読み込み終わる前に(テキストフィールドが空の状態で) UIScrollBar の表示も完了してしまうので、じゃあ読み込み終わった後にもう一回 UIScrollBar を設定してやれば良いじゃないか、ということですね。
その方法は、スクリプトに以下の一文(赤字)を追加するだけで OK です。
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadComplete);
loader.load(new URLRequest("test.txt"));
function loadComplete(evt:Event):void {
output_txt.text = evt.target.data;
scrollbar.scrollTarget = output_txt;
}
UIScrollBar にもインスタンス名を付けることをお忘れなく(ここでは「scrollbar」にしてます)。
これで、UIScrollBar が対象とするテキストフィールドを設定し直すことができました。
外部テキストデータの長さに応じて、ちゃんと動作するようになっているハズです。
雑感&反省
ムービープレビューを信用しすぎてはいけない。
プレビューはあくまでプレビュー。