- ベストアンサー
外部HTMLテキストが埋め込みフォントで表示されず困っています
FLASH MX 2004 + Windows XP で個人のFLASHサイトを制作しています。 容量の増加は覚悟の上、デザイン優先で日本語フォントを埋め込んで、 外部HTMLを読み込んだダイナミックテキストをそのフォントで表示させたいのです。 しかし「プロパティ」の「文字オプション」から埋め込み機能ををオンにすると テキストが一切表示されなくなってしまいます。 ロードに時間がかかっているのかと思い、しばらく待ってみても表示はされません。 埋め込みをオフにすれば元通りシステムフォントで表示がされます。 ちゃんと「*」マークのついた埋め込みフォントを指定していますし、 swfファイルの容量が増加しているのでフォントデータ自体も間違いなく読み込まれているはずなのです。 似たような状況の対処法がネット上を探索しても見つからず、 最終手段でここに書き込ませていただきました。 原因に心当たりのある方の回答を、お待ちしております。 ぜひ宜しくお願いたします。 ※外部HTMLの読み込みは、インスタンス名・変数共に「expcont」というダイナミックテキストへ、 以下のASで行っています。 -------------------------------------------- // LaodVars() インスタンスの作成 myLV1 = new LoadVars(); // 読込み時に実行する関数の定義 myLV1.onData = function(OK) { // ロードに成功すれば if (OK) { // この myLV の変数 explab を explab に代入 expcont.htmlText = OK; } }; // myLV に 「explab.txt」を読み込む myLV1.load("expcont.html"); --------------------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
同じような実験をしてみましたが,普通の通り問題なく表示されますよ。 同じ "ような" 実験です。 書かれていらっしゃるスクリプトや内容に問題を含んでいます。 この問題を改善したからと言って,テキストをそのフォントで表示できるようになるかどうかはわかりませんが, とりあえず問題点を挙げておきます。 1.LoadVars.onLoad と LoadVars.onData の使い方を混同している。 2.テキストフィールドのインスタンス名 と 変数名の使い方を混同している。 (3. 『 「*」マークのついた埋め込みフォント』 の意味がわかりません。) 1.onLoad と onData を使う場合の違い LoadVars.onLoad ハンドラ を使う場合, 外部テキストデータとスクリプトの組み合わせは次のようになると思います 外部テキスト「expcont.html」 (文字コード UTF-8) ---------------------------------- explab=<u>こんにちは。</u><br> <strong>私の名前</strong>は<br> <font color="#ff0000">リカ</font>ちゃん。 ---------------------------------- スクリプト ---------------------------------- // LaodVars() インスタンスの作成 myLV1 = new LoadVars(); // 読込み完了時に実行する関数の定義 myLV1.onLoad = function(OK) { // ロードに成功すれば if (OK) { // この myLV1 の変数 explab を expcont に表示 expcont.htmlText = this.explab; } }; // myLV1 に 「explab.txt」を読み込む myLV1.load("expcont.html"); ---------------------------------- LoadVars.onData ハンドラ を使う場合は普通, 外部テキストデータとスクリプトの組み合わせは次のような感じになると思います 外部テキスト「expcont.html」 (文字コード UTF-8) ---------------------------------- <u>こんにちは。</u><br> <strong>私の名前</strong>は<br> <font color="#ff0000">リカ</font>ちゃん。 ---------------------------------- ---------------------------------- // LaodVars() インスタンスの作成 myLV1 = new LoadVars(); // 読込み完了時に実行する関数の定義 myLV1.onData = function(OK) { // ロードに成功すれば if (OK != undefined) { // この myLV1 内の値を全て expcont に表示 expcont.htmlText = OK; } }; // myLV1 に 「explab.txt」を読み込む myLV1.load("expcont.html"); ---------------------------------- 2.テキストフィールドのインスタンス名 と 変数名 テキストフィールドにインスタンス名が付けられるようになったのは Flash MX 以降です。 Flash 5 までは,テキストフィールド には変数名しか付けられませんでした。 その古い名残で, テキストフィールドに変数名を付けているサンプルや, または,Flash Lite コンテンツ(Flash Player 4 ベース)のサンプルを見かけることがありますが, Flash Player 6 以上の SWF を作成する場合は,基本的に変数名は付けません。 また,せっかく LoadVarsクラスのインスタンスを作成されているのですから, 変数名は無意味です。 Flashドキュメンテーション (Flash8のヘルプ) 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.adobe.com/flash/8_jp/main/00001418.html > これは、旧バージョンの Flash Player > (Flash Player 4 など) 用のアプリケーションを > 作成するときに使用する可能性のある > 非推奨の機能です。 ~~~~~~~~~~~~~~~~~ > それよりも新しいプレーヤーを対象にするときは、 > インスタンス名と ActionScript を使用して、 > テキストフィールドのテキストをターゲットにする > 必要があります。 3.に関しましては意味がわかりませんが, MX2004 では 『 「*」マークのついた埋め込みフォント』 というものが存在していたかもしれません。 私の場合,Windows XP,Flash 8 で Flash Player 7 の SWF をパブリッシュする設定で実験してみました。 埋めこんでみたフォントは 「MS ゴシック」 の 「日本語すべて」 です。 ダイナミックテキスト は,「expcont」 という "インスタンス名" を付けただけで変数名は付けていません。 また,「複数行」 で 「テキストをHTMLとしてレンダリング」 ボタンを押した状態の設定で実験しました。 ===================== 問題点を一応書かせていただきましたが,「解決策」ではありません。 ご質問で書かれていらっしゃる内容の中だけでもこれだけの問題点があるので, 「まだまだ他にも問題点があるのではないでしょうか?」と言う意味での回答です。 なるべくシンプルなサンプルを作成して実験検証してみてください。
その他の回答 (2)
- DPE
- ベストアンサー率85% (666/776)
フォントシンボルを HTML タグを使用するダイナミックテキストで利用するには、リンケージを設定し、更に、埋め込みフォントを使う設定にするスクリプトとフォントを指定するタグが必要です。 まず、「新しいフォント...」で作ったシンボル(フォントシンボル)にリンケージを設定します。 「ライブラリ」パネルに登録されているフォントシンボルを選択した状態で右クリックしてメニューを開き、「リンケージ...」を選択してください。「リンケージプロパティ」パネルが開きます。 ” ActionScript に書き出し”にチェックを入れ、”識別子:”の項目に何か名前を入力してください。 ここで付けた名前が、スクリプトで扱う時のフォント名になります。日本語も使用できますが、半角英数字と” _ ”だけで付けた方が無難だと思います。 テキストフィールドに表示する内容は、<FONT face='フォント名'> タグで囲んでおきます。 フォント名には、「リンケージプロパティ」で付けた識別子を指定します。 最後に </FONT> でタグを閉じ忘れないよう、ご注意ください。 文字の埋め込みは、今回は利用しません。 「文字オプション」では”埋め込みなし”を選択してください。 以上で準備は完了です。 次はスクリプトを書きます。 ****************************** ダイナミックテキストのテキストフィールド” expcont ”があり、フォントシンボルのリンケージ識別子を” BASE_FONT ”と付けたとします。 テキストファイル” explab.txt ”(文字コードは Shift-JIS )の内容は sample= <FONT face='BASE_FONT'> ここに<U>アンダーライン(下線)</U>を引きます<BR> 今月の家計、<FONT color='#ff0000' size='30'>大赤字!! </FONT><BR> 買い物・飲み会は<FONT size='10'>ひかえめ</FONT>に。。。 </FONT> とします。 このテキストファイルを読み込み、HTML タグを有効にして表示するスクリプトは次のようになります。 このスクリプトは、テキストフィールドがあるタイムラインのフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //テキストフィールドのセットアップ //HTMLタグ・埋め込みフォントを使用、<BR>タグ以外での改行を禁止 expcont.html = true; expcont.embedFonts = true; expcont.condenseWhite = true; //Shift-JISで読み込む System.useCodepage = true; //テキストファイルの読み込み myLV = new LoadVars(); myLV.onLoad = function( success ) { //読み込み成功時、読み込んだ内容をテキストフィールドに出力 if( success ) { expcont.htmlText = myLV.sample; } }; myLV.load( "explab.txt" ); 「ムービープレビュー」で確認してみてください。 フォントのデザイン・文字の大きさ、表示画質の設定にもよりますが、一般的には、「フォントシンボルプロパティ」で”アンチエイリアスオフ”にチェックを入れなかった場合は、テキストにアンチエイリアスがかかり、文字の縁がなめらかに表示されていれば成功です。 フォントデータは確かに書き出されているのに、設定やスクリプトの誤りなどが原因で埋め込んだフォントが使用されないこともあります。 意図したフォントで表示されても文字の縁がなめらかにならない時は、システムにインストールされているフォントが使用されている可能性があります。 使用するフォントがインストールされているシステム上では特に、指定のフォントで表示されただけでは埋め込みフォントが使用された証明にはなりません。 システムにあるフォントが使用されている場合は、当然ながらフォントがない環境では他のフォントで表示され、せっかく埋め込んだフォントデータも、ただの容量の無駄遣いになってしまいます。 念のため、指定したフォントがインストールされていない環境でも意図した通りのフォントで表示されるかどうかを確認しておくといいでしょう。 フォントシンボルを作成する時に”ボールド”と”イタリック”にチェックを入れると、太文字・斜体も一応は利用できます。 しかし、最後に指定した <B> または <I> タグがテキスト全体に適用されるなど、不可解な現象が起こるようです。 (ちなみに、当方で検証したフォントは TrueType フォントです) -------------------------------------------------------------- フォントシンボルは、「リンケージプロパティ」で”最初のフレームに書き出し”のチェックを外しても、必ずフレーム1に書き出されます。 フォントシンボルは概して容量が大きいため、フレーム1に書き出されていると、プリロード画面を付ける際に読み込み中に表示するアニメがなかなか始まらなくなってしまいます。 フォントデータは、テキストフィールドの文字を埋め込む機能でも書き出せます。 この特徴を上手く利用すると、任意のフレームにフォントデータを書き出すことができます。 フォントデータを書き出したいフレームに、何も表示しないダミーのダイナミックテキストのテキストフィールドを作り、「プロパティ」パネルにある「文字...」ボタンを押してください。 「文字オプション」が開き、埋め込む文字を指定できます。 ここで埋め込んだフォントデータは、他のダイナミックテキストのテキストフィールドでも使用できます。 HTML タグ付きの外部テキストファイルを読み込む場合は、先のフォントシンボルを使う時と同様に、<FONT> タグの face オプションでフォントを指定します。 ただし、face オプションで指定するフォント名はリンケージ識別子ではなく、埋め込んだフォントのフォント名そのもの、つまり、フォントのリストに表示される通りの名前になります。 半角 / 全角の違い・スペースの有無なども正確に区別されますので、ご注意ください。 この機能を利用してフォントデータを書き出す時は、フォントシンボルを削除してください。 フォントシンボルにリンケージが設定されている場合は特に、フォントのデータが二重に書き出されてしまいます。 テキストフィールドのフォントの埋め込みを利用しても、やはりボールドとイタリックは上手く機能しないようです。 しかし、任意のフレームにフォントデータを書き出せる点はフォントシンボルよりも有利です。 フォントシンボルは、違う swf ファイル間でフォントを共有するような場合に使うものだと思います。
お礼
丁寧な回答ありがとうございます! 早速「リンゲージ」を行いましたが、それまでは600KB弱だったswfファイルが さらに1.4MBまで膨れ上がってしまいました・・・ 埋め込みを成功させるのには重要な作業であることは分かったのですが、 ここまでサイズが大きくなってしまうと、やはりデザインを妥協する方向に傾いてしまいます(汗) どこのサイトでもフォント埋め込みをオススメしないわけですね。 リンゲージ後も表示されない現象には変化がないので、まだスクリプトなどに原因がありそうです。 後半のフォントのシンボル化をしない方法はこれから熟読し、試したいと思います。 ありがとうございました!
こんにちは。 僕も同じような事になる事が多いです^^; 埋め込みフォントの所の「自動カーニング」のチェックをはずすと上手く行く事が多いです。 って、ただの体験談ですみません^^;
お礼
いえいえ、貴重な回答ありがとうございます。 早速「自動カーニング」の部分を確認しましたが、チェックは外れていました。 残念ながらrit_13444さんのケースとは違う原因のようです。 重ねて回答頂けた事に感謝いたします。ありがとうございました!
お礼
とても丁寧な回答、ありがとうございます。 2.の「変数は昔の名残」については全く知らず、とても驚きました。 参考にさせていただきます。 3.ですが、以下のリンクの中盤に 「埋め込みフォントのフォント名の後にはアスタリスク (*) が付きます。」 とありましたので、この様に記述させていただきました。 実際埋め込みたいフォントの名前の後にこの印がついております。 FLASh 8ではなくなった仕様なのでしょうか・・・ (参考リンク:http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001430.html) 1.についてこれから熟読させていただきます。 よく理解してから、なんとか問題解決に導きたいと思います。 本当にありがとうございました!