• 締切済み

ActionScriptで動的にテキストを分解したい

ActionScriptで動的にテキストを分解する方法はあるのでしょうか。 外部テキストを読み込み、回転させたり、ドロップシャドウを適用したいのですが・・ 他の方の同様な質問・回答で、 「画像に変換された文字と外部テキストを比較する方法」 「文字をあらかじめ埋め込んでおく方法」 が記載されていて、参考になったのですが、 テキストを分解する方法については未記載でした。 ・・やっぱり無理なのかなぁ・・ ずばり! お答えお願いします。 できるかできないかハッキリするだけでもかなりスッキリすると思います(苦笑) 宜しくお願いします。

みんなの回答

  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

ダイナミックテキストを分解するのは無理ですが、読み込んだテキストに回転・フィルタをかけて表示することは、Flash Player 8 から使えるようになったBitmapData オブジェクトを利用すると可能です。 ただし、ビットマップ扱いになるので、回転の際にドットが汚く見える点についてはご容赦ください。 次のように考えます。 テキストを読み込んで仮に表示するためのムービークリップを作ります。 これは、ムービークリップの中にダイナミックテキストのテキストフィールドを配置したシンボルとして作ります。 このシンボルを”作業用ムービークリップ”とします。 作業用ムービークリップのインスタンスを配置し、「フィルタ」パネルでフィルタの設定を行います。 すると、テキストフィールドに表示される文字1つ1つにフィルタがかかるようになります。 外部テキストファイルから読み込んだテキストは、このムービークリップのテキストフィールドに表示してください。 作業用のムービークリップ内のテキストフィールドはあくまでもダイナミックテキストですから、回転はできません。 そこで、先のムービークリップの絵を BitmapData オブジェクトに取り込み、別のムービークリップに表示します。 コピー元の絵は不要でしょうから、_visible プロパティを false にして非表示にしておきます。 BitmapData オブジェクトに取り込んだものは、テキストの属性が失われて普通の絵になっています。 あとはムービークリップを回転させる要領で _rotation プロパティを書き換えると、いくらでも回転させることができます。 ----------------------------------------------------------------- 作り方の一例です。 ムービークリップシンボルを作り、シンボル内に”ダイナミックテキスト”に設定したテキストフィールドを配置してインスタンス名を付けてください。 仮に” disp ”と付けたとします。 テキストの色・フォントの設定などは、シンボルを作る時点で済ませておくと楽です。 テキストフィールドの境界線と背景は”なし”にしてください。境界線・背景があると、テキストではなくテキストフィールドそのものにフィルタが適用されてしまいます。 できたムービークリップシンボルのインスタンスをステージに配置し、これにもインスタンス名を付けてください。 ここでは” temp_clip ”とします。 temp_clip を選択した状態で、「フィルタ」パネルでフィルタの設定をしてください。 ドロップシャドウだけでなく、他のフィルタを利用することもできます。 以上で準備は完了です。 次はスクリプトを書きます。 ***************************** スクリプトのサンプルです。 このスクリプトは、メインのタイムラインに設定してください。 なお、読み込むテキストファイルの内容は  sample=サンプル:Test12345 とします。 外部テキストファイルを読み込む方法の詳細は今回は本題ではありませんので、ここでは割愛させていただきます。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  //作業用テキストフィールドの初期設定  //複数行・折り返しあり・自動伸縮あり・境界線/背景なし  with( temp_clip )  {   disp.multiline = true;   disp.wordWrap = true;   disp.autoSize = "left";   disp.border = false;   disp.background = false;  }  //表示用のムービークリップを作成し、(10,50)の位置に配置する  this.createEmptyMovieClip( "disp_clip" , 0 );  disp_clip._x = 10;  disp_clip._y = 50;  //外部テキストファイルをShift-JISで読み込む  System.useCodepage = true;  load_obj = new LoadVars();  load_obj.onLoad = function( success:Boolean )  {   if( success )   {    //作業用のムービークリップ内にテキストを表示    temp_clip.disp.text = load_obj.sample;    //BitmapDataオブジェクトを作成    //作業用ムービークリップと同じ大きさで、透過あり    bmp_obj = new flash.display.BitmapData( temp_clip._width , temp_clip._height , true );    //作業用ムービークリップの絵を取り込む    bmp_obj.draw( temp_clip );    //この内容を表示用ムービークリップに表示    disp_clip.attachBitmap( bmp_obj , 0 );    //作業用ムービークリップを非表示にする    temp_clip._visible = false;   }  };  load_obj.load( "○○○.txt" ); BitmapData オブジェクトに取り込んだ絵のデータは、単にメモリの中にデータとして存在しているだけです。 表示するにはムービークリップが必要です。 上記の作例では createEmptyMovieClip で空っぽのムービークリップを作って表示していますが、空のムービークリップシンボルを作ってステージに配置しておいても同じです。 回転の処理はありませんけれど、例えばボタンシンボルのインスタンス” btn ”を配置して  btn.onRelease = function()  {   disp_clip._rotation += 10;  }; というようなスクリプトを追加してみてください。 ボタンをクリックするたびに、読み込んだテキストをもとに作った画像が回転します。 ***************************** ダイナミックテキストでは、一般的にはデバイスフォントを使用するかと思います。 デバイスフォントは普通はアンチエイリアスがかからない(閲覧者のOSや設定によってはかかることもありますが、Flash からは制御できません)ため、文字はどうしてもギザギザが目立ちます。 おまけに、ムービークリップで表示する時はベクトルデータではなくビットマップデータになっているので、回転させると余計に汚く見えます。 ドロップシャドウフィルタをかけると、フィルタ適用後の画像はテキストフィールドよりも少し大きくなります。 上記のスクリプトでは BitmapData オブジェクトは作業用のムービークリップの大きさ(つまりはテキストフィールドと同じ大きさ)しか確保していませんので、テキストフィールドとテキストの長さ・フィルタの設定によっては、できた画像の下端が欠けて見える場合があります。 また、BitmapData を使う時はメモリの使いすぎに注意しましょう。 BitmapData オブジェクトは大きさの制限がありますので、極端に大きいものには適用できません。 不要になったものは明示的に削除してください。 ・・・まあ、いろいろと粗も目立つ方法ですけれど、それでもよろしければご参考になさってください。

halchion
質問者

補足

有難うございます!! 本日は時間があるので、早速試してみようと思います 無理かなぁと思っていても工夫しだいで実現できちゃったりする(多少妥協はあっても)のが、Flashのスゴイところだと思います。 パズルを解いているみたいで面白いですね。 また後ほど報告を書き込みに来ます^^

noname#35109
noname#35109
回答No.2

スバリ,無理です。 Flash 8 でも無理ですし, Flash 9 でも,10でも… 将来にわたっておそらく同じ事です。 テキストの分解は, Flash オーサリング時において, オーサリング環境にインストールされているフォントに関して, オーサリングツールによってできることです。 何か人民の人民による人民のための… みたいですが, そういうことです。

halchion
質問者

お礼

ありがとうございました! スッキリしました(笑) 本件以外にも色々と実験、調査してみた結果、 Flashでできること、できないことの境界が少~しずつ明らかになってきました。。 あんまりなんでも実現できすぎると、それだけソースも複雑になるでしょうし、 とっつきにくさもあってここまで普及しなかったかもしれませんね。 ある程度複雑な動作を仕込みたい場合は、他言語と連携させたり、 Flash以外の技術を利用することも考えたほうがいいかもしれませんね。。

halchion
質問者

補足

「ActionScriptによるテキストの動的な回転やエフェクト付加」の代替案・・ ダメもとでもう少しだけお待ちします。。

回答No.1

『ダイナミックテキストをムービーとしてあつかえるか?』 ということでしょうか? 仰るとおり、テキストプロパティから埋め込みをすれば可能です。 ちなみにFlashの基本機能にドロップシャドウはありません。

halchion
質問者

補足

早速のご回答ありがとうございます!! >『ダイナミックテキストをムービーとしてあつかえるか?』 そうですね。そういうことでもあります。 埋め込みはかなり重くなるのでできれば避けたいんですよね^^; ちなみに、Flashはバージョン8のprofessionalなので、「フィルタ」でドロップシャドウが使えます。 ActionScriptでも、flash.filtersというクラスにドロップシャドウ含めた各フィルタメソッドがありますね~。 *************************** 質問時に環境を載せるのを忘れていました。すみません。 Frash8 professional Actionscript2.0 ***************************

関連するQ&A