Platform: All
Version: 5.0 and above
問題
デバイスフォントは、ユーザーのローカル環境にインストールされているフォントで、テキストを表示します。[ダイナミックテキスト]または[テキスト入力]のTextFieldには、デフォルトでデバイスフォントが使用されます。デバイスフォントにマスクレイヤーを設定したり、回転すると、SWF上で表示されないことがあります。
図001■デバイスフォント[_ゴシック]の設定された[ダイナミックテキスト]

原因
Flash Playerがフォントの表示を完全にコントロールするには、原則として設定されたフォントのアウトライン情報が必要です。
対処法
[ダイナミックテキスト]または[テキスト入力]のTextFieldにマスクレイヤーを設定したり、TextFieldを回転した状態で表示するには、[プロパティインスペクタ]の[文字オプション]で、[フォントのアウトラインの埋め込み]を設定します(Flash TechNote「Text disappears in masked layer or when printed」および「Using fonts in Flash 5 and later」参照)。ただし、日本語フォントのアウトライン情報をすべて埋込むと、数メガバイトが追加されます。したがって、[範囲の指定]を制限するなど、データサイズに注意する必要があります。
図002■[文字オプション]ダイアログボックスで[フォントのアウトラインの埋め込み]を設定

Flash Player 6.0r40以降を対象とする場合には、MovieClip.setMask()メソッドを使用すれば、デバイスフォントにマスクを設定することができます[*1][*2]。たとえば、デバイスフォントを指定したTextFieldをMovieClipインスタンスmy_mcに格納し、マスク用のMovieClipインスタンスを同階層のmask_mcに作成した場合、これらのインスタンスを配置したフレームアクションにつぎのスクリプト(001)を設定します。
スクリプト001■MovieClip.setMask()メソッドを使ってTextFieldを内包したMovieClipにマスクを設定
// フレームアクション
// TextFieldを内包したtext_mcとマスク用のmask_mcを配置
text_mc.setMask(mask_mc);
|
[*1] デバイスフォントのテキストに対しては、マスクとして設定するMovieClipインスタンスの形状ではなく、その境界ボックスの矩形でマスクが適用されることにご注意ください(図003)。
図003■テキストはMovieClipの境界ボックスの矩形でマスクされる

マスクされていないテキストとMovieClip
|

MovieClipの境界ボックスの矩形でマスクされたテキスト
|
[*2] Flash 8では、テキストを配置したMovieClipとマスクとして設定するMovieClipの両方に対して、MoiveClip.cacheAsBitmapプロパティをtrueに設定すると、マスクインスタンスの形状でテキストをマスクすることができます(スクリプト002および図004。なお、にゃあプロジェクト「テキストフィールドにマスク」をご参照ください)。
スクリプト002■マスクとTextFieldを内包したMovieClipのcacheAsBitmapプロパティをtrueに設定する
// フレームアクション
// TextFieldを内包したtext_mcとマスク用のmask_mcを配置
text_mc.setMask(mask_mc);
text_mc.cacheAsBitmap = true;
mask_mc.cacheAsBitmap = true;
|
図004■テキストがMovieClipの形状でマスクされる

マスクとテキストのMovieClipのMovieClip.cacheAsBitmapプロパティをtrueに設定する
|
_____
作成者: 野中文雄
更新日: 2006年5月22日 注釈[*2]および図003-004を追加
更新日: 2005年5月9日 注釈[*1]を追加
作成日: 2005年2月20日