お世話になります。FLASH8の質問です。
外部テキストをloadVariablesでムービークリップの中にロードする際に、「HTMLレンダリング」をonにして<font color="#cc0000">したいのですがうまくいきません。
ムービークリップは二つ(インスタンス名:「title_mc」「honbun_mc」)あり、それぞれがダイナミックテキストボックスを持ち、インスタンス名を「title_txt」「honbun_txt」としています。
テキストファイルは"text.txt"で、
内容は
title=・・・
&honbun=・・・<font color="#cc0000">・・・</font>・・・
シーン1の1フレーム目に
this.loadVariables("text.txt");
this.onData = function() {
this.title_mc.title_txt.text = title;
this.honbun_mc.honbun_txt.text = honbun;
};
プロパティパネルの変数ボックスには何も記入していません。
この方法で出来ると思うのですが・・・うまくいきません。
HTMLレンダリングはムービークリップ内では効かないのでしょうか?それとも何かコツがありますか?
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1です。
LoadVars を使う場合は、次のようなスクリプトになります。
このスクリプトは、テキストフィールドを持つムービークリップを配置したタイムラインのフレームに設定してください。
(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)
//LoadVarsオブジェクトを作成
load_obj = new LoadVars();
//読み込みが済んだ時の処理
load_obj.onLoad = function( success )
{
//読み込みが成功したら、
//読み込んだ変数をHTMLとしてレンダリングして表示
if( success )
{
title_mc.title_txt.htmlText = this.title;
honbun_mc.honbun_txt.htmlText = this.honbun;
}
};
//Shift-JISで読み込む
System.useCodepage = true;
load_obj.load( "text.txt" );
var と「 : 」による型の明示は省略させていただきました。Flash Player 6 以上、ActionScript 1.0 でもパブリッシュできます。
テキストファイルの文字コードを UTF - 8 にした場合は、
System.useCodepage = true;
↑この1行を削除するかコメントにしてください。
*******************************
loadVariables も LoadVars.load も、外部から情報を読み込むことが主な仕事です。
外部から情報を読み込む場合は、「変数名=値」という形で情報を用意し、Flash では変数として扱う方法が一般的です。
例えば、テキストファイルの内容が
title=サンプル
&honbun=本文:<font color='#cc0000'>ここだけ色が変わる</font>
だとします。
これを loadVariables か LoadVars.load で読み込むと、” title ”と” honbun ”という名前の変数が用意され、その内容がそれぞれ”サンプル””本文:<font color=・・・</font>”になります。
trace は、指定のメッセージや変数の内容などを「出力」パネルに表示するアクションです。
ですから、上記のスクリプトの onLoad = function の中で
trace( this.honbun );
と書くと、読み込まれた変数 honbun の内容である、タグの付いたままの文字列が「出力」パネルに表示されます。
trace は主に、スクリプトを書く時に、変数の値が何になっているか・関数が呼び出されているかどうかなどを確認するために使います。
trace アクションによってテキストフィールドに文字列が表示されるのではありません。
文字列や変数の内容をテキストフィールドに表示したり HTML タグを解釈して文字を装飾するのは、TextField クラスという別の担当者の仕事です。
タグをレンダリングしてテキストフィールドに表示する時は、trace の代わりに、テキストフィールドが持っている htmlText プロパティに読み込んだ変数を代入するスクリプトを書きます。
-------------------------------------------------------------------
ActionScript では、変数や関数・インスタンスなどには全て持ち主がいると考えます。
この持ち主を正確に指定しないと、目的のものを利用することができません。
持ち主の指定のことを”ターゲットパス”といいます。
ターゲットパスにはいろいろな書き方があり、this を使った書き方もそのうちの1つです。
this は使う場所によって指す相手が変わってしまうクセモノです。
慣れないうちは何にでも付けてしまいがちですが、this を付けても付けなくても同じ場合もあれば、this を付けないと上手く指定できないもの、逆に this を付けたために失敗してしまうこともありますので、注意が必要です。
*******************************
先述の LoadVars を使ったスクリプトで、onLoad = function の中を見てみてください。
title_mc.title_txt.htmlText = this.title;
honbun_mc.honbun_txt.htmlText = this.honbun;
↑この部分が、LoadVars で読み込んだ変数の内容をテキストフィールドに表示するスクリプトです。
ご提示のスクリプトですと、ムービークリップの名前の前に this が付いていますよね。
読み込んだ変数である” title ”と” honbun ”の前にはありませんが、今回の例では逆に、こちらの方に this を付けています。
LoadVars.load で読み込んだ変数は、読み込みを担当した LoadVars オブジェクトのものになります。
先述のスクリプトですと、load_obj という LoadVars オブジェクトのものになっています。
onLoad はイベントハンドラといって、一種の変数のようなものです。
変数と似たようなものですから、イベントハンドラにも当然、持ち主がいます。
今回の例では、onLoad の持ち主は load_obj です。
イベントハンドラには関数を登録します。
登録される関数の中での this は、イベントハンドラの持ち主のことを指します。
つまり、
this.title
は” load_obj が持っている変数 title ”という意味になり、読み込まれた変数を利用することができます。
*******************************
ステージに配置したインスタンスや、メインのタイムラインで特に何も指定せずに宣言した変数などは、通常は _root というムービークリップのものです。
先の load_obj も、スクリプトをメインのタイムラインに書いたのなら _root のものです。
ターゲットパスは省略して書くこともできます。
タイムラインでターゲットパスを省略すると、これはそのタイムラインの持ち主を表します。
ですから、メインのタイムラインで
load_obj = new LoadVars();
と書くと、この load_obj は _root のものになるのです。
省略した時の対象は関数の中などでも同様で、この関数が定義されているタイムラインの持ち主を指します。
つまり、onLoad = function の中の
title_mc.title_txt
↑これは、”メインのタイムラインの持ち主= _root にあるムービークリップ title_mc の中のテキストフィールド title_txt ”と解釈されます。
これに this を付けると、どうなるでしょうか?
onLoad = function の中での this は、onLoad の持ち主である load_obj を指します。
しかし、load_obj は title_mc というムービークリップを持っていません。
この場合は this を付けると、目的のテキストフィールドの持ち主を正確に指定できないために、読み込んだ文字を表示できなくなってしまいます。
同じように考えると、onLoad = function の中で、読み込んだ変数 title と honbun には this を付けなければならない理由も見えてくると思います。
this がないと、これらの変数は、関数が定義されている _root のものだと解釈されます。
ですが、読み込まれた変数は LoadVars オブジェクト load_obj のものであって、_root のものではありません。
ちなみに、loadVariables で読み込む時に使う onData もイベントハンドラです。
this.loadVariables とした時は、メインのタイムラインであれば this は _root のことを指しています。
そして、loadVariables で読み込むと、読み込まれた変数は loadVariables の持ち主のムービークリップのものになります。
this の指す相手や this を省略した時の対象から、読み込んだ変数を表示できる理由を考えてみてください。
-------------------------------------------------------------------
LoadVars クラスの登場により、loadVariables で読み込む手法は旧式になりました。
世の中後からできたものの方が高性能ということで、LoadVars にはできるけれど loadVariables だとできないこともあります。
LoadVars の優れているところは、
・ CGI とやりとりしやすい
今回は変数を読み込むだけでしたが、CGI に変数を送ったり、
送ったものを CGI で加工して再度送り返してもらうこともできます。
・読み込みの状況がいろいろと把握できる
これにより、読み込みが失敗した時などの処理を作りやすくなりました。
・変数でなくても読み込める
「変数名=値」として情報を用意するのが一般的ですが、実は、LoadVars であれば
変数の形になっていないテキストでも読み込んで利用することができます。
などです。
これらの特長を利用しないなら loadVariables とあまり変わりません。
単純にテキストファイルから変数を読み込む・読み込みの完了を待って何かをするくらいであれば、loadVariables でも充分用が足ります。
ただ、旧式になってしまったということは、いずれは使用を避けるスクリプトに指定される可能性があります。
LoadVars はターゲットパスのこと・関数が受け取るパラメータ(引数といいます)などいろいろとややこしい点もありますので、ActionScript に慣れてきたら研究してみてください。
丁寧に解説いただきありがとうございました。
理解する間もなく時間が過ぎてしまい、お礼が遅くなりすみません。
理解できるようにがんばりたいと思います!
ありがとうございました。
No.2
- 回答日時:
こんにちは。
「うまくいかない」というのは具体的には、「HTMLレンダリングされず、タグのまま表示される」ということでしょうか?
下記2点を確認してみてください。
1)ダイナミックテキストのプロパティで「テキストをHTMLとしてレンダリング」がチェックされていること
2)this.title_mc.title_txt.text= ではなく、this.title_mc.title_txt.htmlText=に変える
以下余談です。
loadVariablesでもonDataイベントが発生するようですが、
下記のようにLoadVarsを使ったほうが良い気がします。
var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean) {
if (success) {
trace(this.title);
trace(this.honbun);
} else {
trace("Error loading/parsing LoadVars.");
}
};
my_lv.load("text.txt");
この回答への補足
loadVarsは・・・すみません、知ってるスクリプトしか使えないのです。せっかく書いていただいたのに、わたしには理解できない・・・m(__)m
var my_lv:LoadVars = ・・・以下をシーン1の1フレーム目に書いてみましたら、出力パネルに表示(traceだから、ですよね?)されてHTMLタグのまま記述されてました。
No.1
- 回答日時:
HTML タグを付けたテキストをレンダリングして表示する時は、text プロパティではなく” htmlText ”というプロパティを書き換えます。
text プロパティを書き換えると、タグが付いたままのテキストが表示されてしまいます。
テキストフィールドがムービークリップの中にあるかどうかは関係ありません。
ムービークリップ内のテキストフィールドでも、HTML で装飾したテキストを表示できます。
ご提示のスクリプトの
> this.title_mc.title_txt.text = title;
> this.honbun_mc.honbun_txt.text = honbun;
↑この部分を、
this.title_mc.title_txt.htmlText = title;
this.honbun_mc.honbun_txt.htmlText = honbun;
(各行頭に全角のスペースが入っています。コピーする際はご注意ください)
に書き換えてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
flash (.swf) を編集したい
-
potplayerについて質問です
-
uwscでExcelに自動記入
-
自分でチラシを作りたいです!...
-
アメブロで音声ファイルを貼る方法
-
AS3 MC内ボタンクリックでシー...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLの&が&に変換されない
-
スクロールバーの自作の仕方
-
flashのおみくじのような(4桁...
-
UIScrollBarを利用したスクロー...
-
AS3 時計のコロンの点滅を0.5s...
-
FlashとJSPの連携
-
今日の残り時間を表示する時計...
-
文字を一文字づつ表示し、スク...
-
ランダムに4桁の数字を表示する...
-
【ActionScript】onLoad後の「t...
-
ダイナミックテキストの表示値...
-
flashで1秒間に任意の数字を加...
-
ムービー上で入力した値の送信...
-
外部テキストの文字化けが直ら...
-
LoadVars
-
ActionScriptをつかってテキス...
-
HTMLレンダリングについて
-
txtをloadしているswfをloadMovie
-
複数の入力テキストに同じ入力...
-
Googleの検索窓をFlashオブジェ...
おすすめ情報