いろいろとオブジェクトはあるが、今回はTextFieldを集中的に学習してみる。
TextFieldはFlashオーサリングツールからも、Flexからも、ActionScript単体からも使えるナイスガイだ。
断言しちゃうけど、テキストさえ表示できればコンピュータの出力に必要なものは事足りるからね。からねー!!
まず、TextFieldクラスがどのへんにあるかチェック。
私の渾身の作である「Flash(ActionScript3.0)リファレンス / クラス継承 / トップ・flash」を見ると、次のような継承関係の上にTextFieldが存在することが分かる。
Object => EventDispatcher => DisplayObject => InteractiveObject => TextField
TextFieldを使いこなすには、以上のオブジェクトを一通り理解しておく必要がある。
この継承ルート上に乗っているオブジェクトのメソッド・プロパティは基本的に全部TextFieldで使えるからだ。
うへぇ。これだからオブジェクト指向というやつは困っちまうんだよ。
テキストっちゅーたら、print "Hello World!!"ですぐ出てくるもんだろーがっ!!
気を取り直して更に研究を続けます。私の渾身の作である「Flash(ActionScript3.0)リファレンス / パッケージ / トップ・flash」を見るとflash.text パッケージにTextFieldはある。だいたいこのパッケージの中のオブジェクトはTextFieldを使う時に必要そう。
類似のオブジェクトに、StaticText 、Label、TextInput、TextAreaなどがある。
関連オブジェクトに、TextFormat、StyleSheet 、Font、TextEvent、KeyboardEventなどなど…。
なんなのこれ、あたしゃテキストを表示したいだけなんよ。やる気失せりんぐ!!!オブジェクト指向、死ね!!!
さて、気を取り直して。取り合えず字を表示してみよう。
ツールからを選んで、ステージにテキストフィールドを作る。
これでTextFieldオブジェクトができた訳だが、ActionScriptから扱うためには名前(識別子)を付けてやらなきゃいけない。
あたしゃ前から思っているんだけどね。名前で管理する方式は早晩崩壊するよ。
WindowsとかいうOSが特にその傾向強くて辟易するんだけどね。
名前で管理する方法は、大きく二つのどうしようもない弱点が存在する。
一つは「名前をつけるコストが高すぎる」ということ、もう一つは「人は物事を名前で覚えない」ということ。
会話する時に困るから「しょうがなく」使っているだけでね。本来人間はものを名前では認識してなくて、形と位置とか色とか、匂いとか音とかで区別してんですよ。
ActionScript3.0はボタンにスクリプトが書けない。これはねオブジェクト指向的に正しいのかと問われると、甚だ懐疑的にならざるをえないのよ。現在のプログラムのトレンドとしては極めて正しく、すっきりして管理しやすくなるとしてもね。
だいたい、ボタンに書いたら検索しにくくなり全体が把握しにくくなります、とかいうAdobeの言い訳がね、ばかばかしい言い訳なんですよ。
そりゃアンタ、「私には使いやすい検索機能なんか作る能力はございません」と宣言している訳だからね。ボタンにスクリプト書こうと、検索してスクリプトを表示した時に書いてあるオブジェクトを把握しやすけりゃ、むしろ分かりやすいんだよ。名前より「形や位置や色」の方がね。
Σc ' _' ) < ゴタクが多いんだよ $ σ_σ$ < 口だけで実がともなわない典型的オタクね Σc ' _' ) < 駄洒落か… $;σ<σ$ < ちっ、違うわよっ!!
閑話休題。
Typeをダイナミックにして、テキストフィールドにインスタンス名を付ける。testFieldとした。
そして、タイムラインのフレームアクションを書く。
testField.とドットを打ってもコードヒントが出ない…、お前の腹の中のことだろーが、いい加減理解していいんじゃないか。
そんな訳で、未だにFlashオーサリングツールでは接尾辞の_txtをインスタンス名の後ろに付けた方が良さそうだ。
ちなみに、以下のようにコメントの中にヒントを書いて、おバカなエディタに教えてやることもできる。
// TextField testField;
しかしこの、コードヒントがまた一度に表示される量が少ない。たった8つ。
ctrlキーを押すと閉じちゃうのが、returnをctrl+mでdeleteをctrl+hで打っている私としては、最悪な仕様。もうアホかと。それ以前にこのエディタ、この二つの操作を受け付けないんだけどね。
コードヒントの左にアイコンが付くんだけど、プロパティとメソッドの区別すら無いのはどういう訳だ(FlexBuilderは区別がある、プロパティでもイベントやスタイルなんかの違いまであるのに…)
それにシンタックスカラーに合わせた色づけも無いため甚だしく統一感に欠ける。
ちなみに、私はコードヒントを表示させるためだけに接尾辞を書くことを良くやる。例えば_mc.とやればMovieClipのコードヒントが出る。
このへん詳しくは、野中さんのFN0303002 - コードヒントの活用 - Flash : テクニカルノートを参考にしてもらいたい。
そうそう、テキストフィールドを使うのね。
次のようなスクリプトを書いてパブリッシュ。当然問題なく表示される。
testField.text = "はろーわーるど";
てゆーか、このへんは既に「AS3.0でXMLを使ってみる」でやったね。
しばらくテキトーにやってみたが、今イチどうやっていいものか良く判らなかったので、テキストの操作 ってところを一通り目を通すことにした。
急がば回れ。とはいえ既に回りすぎるぐらい回ってるんじゃないかと思わんでも無い。
なんかサンプルが動かないが…。
ドキュメントクラスに設定してサンプルを動かしましょう的なことが書いてあるんだが、その通りやっても動かん。
壁にぶつかる。がっしょーん。
ふと気づいたんだが、そもそもSpriteをextendsしているクラスって、ドキュメントクラスに設定してイイの?SpriteをMovieClipに変えたら動いた。
あータイムラインに別のスクリプト書いてるから「未定義である可能性の高いメソッドaddFrameScriptの呼び出しです」になるのか。
なんでほぼ間違いなく使いどころの無いSpriteをextendsしたドキュメントクラスなんかサンプルにするかね。Adobeはおバカかね。
私の場合、最初からフレームスクリプト書いてたけど、サンプルが動いた後に普通フレームスクリプト書いてみるでしょ、そうすると意味の分からんエラーでしょ。
なんだよ、チュートリアルでこんなエラー出させんなよ。そりゃ初心者は挫折するよ。ActionScript3.0が流行らない訳だよ。
ん、てゆーかaddFrameScriptってなんだ?そんなん見たこと無いんだが。ぐぐれオレ。
えーと、プログラマ気分 | 【AS3.0】ドキュメントに載らないメソッド(addFrameScript)によると、てゆーかタイトルでいきなり判明しているけど、隠しメソッドらしい。
ふーん、そのうち便利に使えるかもしれないな。
てなわけで、「初心者用チュートリアルをやるだけで一日費やしちまったよ!!」Adobeのあほぉー、お前教えるの下手だよ。
TextFieldを一通り眺めてみて思ったんだけど、意外と使い勝手が良く無い。
未だにparagraph、line、word、charactorがオブジェクト化してなくて、すごい手続き的な手法でアクセスしなきゃいけない。
Stringもムービークリップのパスみたいにアクセスできりゃ良いんだけどねぇ。例えばこんな感じ。
TextField.text.paragraph[10].length
できるでしょ、そんな能力ぐらいあるでしょAdobeさん。ECMAを拡張しちゃっていいでしょ。AppleScriptは範囲指定だって文字オブジェクトでスマートにできるよ!!
どうも選択範囲の色指定ができないっぽい。…えー、もう自前で全部用意するしか実現方法無いのか?
背景と文字が指定できて、選択範囲の色が指定できないだとぉーー!!!このヌケサクがぁ!!
…私が探しきれてないだけってことはないですかね、無いとしたらAdobeも、あまりにお間抜けだと思うんですが。
TextSnapshotってクラスにsetSelectColorってメソッドがあるが、うーん関係ない?やっぱOS作ってないところは、こういう基本ができてないのか?
なんちゅーか、MXのころはまともに使えないレベルだったのが、使えなくも無い程度にはなったか?
OSやブラウザなんかに遠慮しないで進化して、縦書き入力とかルビとか使えたって罰はあたらないと思うのに、まだまだ遥か手前だ。
文字の色などのスタイルの設定が、直接・TextFormat・CSSの三種類あって、なんとも統一感に欠ける。
とりあえず、フキダシコンポーネントを作るにあたって、基礎的な技術を習得しておく。
ムービークリップをクラス化するで作った漫才を、台詞毎に別TextFieldで生成し、スクロールするムービーを作ってみる。
というわけでできたのがこのページの上のムービー。一応ダウンロードファイルも用意しました。
test.zip(Flash CS3用のflaとasファイル 13Kbytes)
今日はここまで。
2008-03-30