回答受付中の質問
ダイナミックテキストに対して、
伸縮や回転をしてしまうと文字が表示されなくなってしまいます。
ダイナミックテキストを90度回転させることは可能でしょうか?
私なりの解決策としては、
全文字のグラフィックを用意し読み込んだ文字と比較し、
一致するグラフィックを配置して伸縮・回転させる方法しか思いつきませんでした。
この方法は、数値やアルファベットだけであれば可能かもしれませんが
全角文字を回転させたいため無理があります(^-^;
もう一つ質問です。
ダイナミックテキストの文字を縦に表示したいのですが、
ダイナミックテキストのwidthを1文字分のサイズにし
値を代入してみましたが最初の1文字しか表示されません。
縦に表示する方法はないでしょうか?
こちらの解決策は、charAtで1文字ずつ区切り
区切った数だけダイナミックテキストを配置し、
区切った値を代入していく方法しか思いつきませんでした。
スマートな解決策がありましたら教えてくださいm(__)m
投稿日時 - 2005-02-20 04:02:04
1人が「このQ&Aが役に立った」と投票しています
回答(2件中 1~2件目)
ダイナミックテキストの回転は、#1の方がおっしゃる通り、フォント情報を埋め込んでおくことで利用できるようになります。
ただし、フォントの情報を埋め込むとは、文字1つ1つの情報を、描画ツールで描いた絵と同様に、ベクトルデータの形で記録することです。
日本語全てを埋め込むと、ファイルサイズは2メガ3メガが当たり前の大容量になり、ネットで公開した時のダウンロードはもちろん、ムービーのプレビューやパブリッシュにも時間がかかるようになりますので、ご注意ください。
--------------
縦書きは静止テキストのみ可能で、ダイナミックテキストでは利用できません。
(「プロパティ」パネルにある、テキストの方向を設定するボタンが、ダイナミックテキストの場合は選択できなくなります)
しかし、”ー”や”~”といった文字を利用しない1行のテキストならば、ちょっと工夫すると縦書きのように見せることはできます。
ダイナミックテキストまたはテキスト入力に設定したテキストフィールドは、TextField クラス( Flash MX の場合はオブジェクト)で制御できます。
TextField クラスにはいろいろなプロパティがありますが、そのうちの、テキストフィールドを表示するテキストの長さに応じて自動的に伸縮するかどうかの autoSize 、文字を端で折り返すかどうかの wordWrap を使います。
autoSize はデフォルトでは none (伸縮なし)になっていて、テキストフィールドの大きさを超える長いテキストは表示されないようになっています。
これを true ・ left ・ right ・ center のいずれかにした場合は、表示するテキストの長さによってテキストフィールドの左右が伸縮します。
また、wordWrap プロパティを true にすると、テキストがフィールドの端で折り返されるようになります。
つまり、autoSize を none 以外・wordWrap を true にしておくと、行数に応じてテキストフィールドが下方にも伸張されます。
1行の縦書きのテキストとは、1文字ごとに改行が入った、複数行から成る文字列と考えることができます。
例えば、読み込むテキストに
test=テ%0Aス%0Aト
このような形で、最初から改行のコード( %0A または %0D )を挿入しておくのが手っ取り早いのですが、字数が多いと面倒ですし、テキストが見にくくなって管理も大変です。
この点は、ActionScript の String クラスを使って、スクリプトで改行を挿入すると簡単です。
ステージに配置するテキストフィールドは、1文字だけ表示できる大きさで構いません。
先述の通り、autoSize と wordWrap を設定しておくと、あとはテキストの長さに応じて自動的にサイズが変わります。
今回は1行が1文字になりますので、autoSize の設定は left ・ right ・ center のどれでも同じです。ちなみに、true は left と同じ機能です。
例えば、1文字しか表示できないテキストフィールド”txt”がステージにあり、読み込むテキストファイルが test.txt で、test.txt の内容が
test=縦書きのテスト
だとします。
このテキストを読み込み、縦書きのように表示するスクリプトは、大体、次のようになります。
このスクリプトはフレームに設定してください。
(各行頭に全角のスペースが入っています。コピーする際はご注意ください)
//テキストフィールドの設定
txt.autoSize = "left";
txt.wordWrap = true;
//テキストの読み込み
System.useCodepage = true;
load_obj = new LoadVars();
load_obj.load( "test.txt" );
//読み込み完了時の処理
load_obj.onLoad = function( success )
{
var temp , char , str , i;
if( success )
{
temp = new String( this.test );
str = new String( "" );
//読み込んだ文字列に、1文字ごとに改行を挿入
for( i = 0; i < temp.length; i++ )
{
//1文字ずつ取り出し、改行を加えて新しい文字列を作る
char = temp.charAt( i );
str = str.concat( char , "\n" );
}
//テキストフィールドに表示
_root.txt.text = str;
}
};
文字列の操作ですが。
ループを利用して、読み込んだ文字列の先頭から1文字ずつ取り出し、その文字に改行コード( ActionScript では \n )を追加して str という文字列に順に連結します。
str は最初は空っぽですが、ループを繰り返していくうちに、読み込んだ文字列の1文字ごとに改行が挿入された文字列が入っていくという仕組みです。
text はテキストフィールドに表示する文字列を管理しているプロパティで、書き換えると表示する内容を更新することができます。
縦書きの場合はプロポ-ショナルフォントはあまり意味がありません。むしろ、字の幅が不揃いでズレてしまい、見辛くなることもありますので、固定幅フォントのご使用をオススメします。
1つのテキストフィールドには1行しか表示できませんが、複数のテキストフィールドを用意して、1行に表示するテキストを1つずつ変数に分けて同様の要領で表示すると、複数行の縦書き表示も可能かと思います。
ただ、所詮は、本来横書きのものを1行に1文字ずつ表示して、縦書きに見せかけているにすぎません。”ー”や”~”は横向きのままになってしまいますし、小さい字( ぁ ぃ ぅ ぇ ぉ っ ゃ ゅ ょ ゎ)は、字の向きは問題ないものの、レイアウトが少々不自然になりますが、そのあたりはご容赦ください。
あまりスマートとは言えませんけれど、よろしければご参考までに。
投稿日時 - 2005-02-23 18:19:06
こんにちわ。
えっと、確認していないので的を射ているかわかりませんが・・・・。
ダイナミックテキストの場合文字の埋め込みをしていないと、たとえば、だんだん薄くしていくといったことは出来ないじゃなかったような気がするのですが・・・。
また、縦書きに関しては、ダイナミックテキストのプロパティの文字の埋め込みを設定するボタンの近くに、縦書き用の設定するボタンがあったような気がするのですが。
widthを1文字分にすると、見える部分が1文字となってしまい他の文字は隠れてしまっているのだと思います。
よって、スクロールさせるような仕組みが必要になりますが、お望みの縦書きとは違った感じになってしまうと思います。
まずは、ダイナミックテキストのプロパティ設定の部分で確認してみてください。
投稿日時 - 2005-02-23 00:49:31