• ベストアンサー

テキストファイルからの読み込みにつきまして

はじめまして。Flash初心者です。 ただいま、「プロとして恥ずかしくないFlashの大原則」のP94ページの 外部テキストからの設定が可能な縦メニューを挑戦しているのですが、テキストファイルからの日本語の読み込みが表示できません。アルファベットでしたら表示ができるので、どこがおかしいのかわからなくなってしまいました。 以下、使用中のロジック // 外部テキストのエンコード設定 System.useCodepage = true; i = 0; // メッセージウィンドウに1文字ずつ表示する関数を作成 function msgWindow( winObj, mObj ){ if( i <= mObj.mMsg.length ){ winObj.msgStr.text = mObj.mMsg.substr( 0, i ); i++; } else{ i = 0; clearInterval( _root.tID ); } } // ロード時に外部テキストを読み込む onLoad = function(){ if( _root.textUrl != null ){ this.loadVariables( _root.textUrl ); } else{ this.loadVariables( "menu.txt" ); } } // データを読み込み後の処理 onData = function(){ // メニューボタンをステージに配置 for( cnt = 1; cnt < 2; cnt++ ){ if( eval( "menu" + cnt ) !== undefined ){ mObj = "mBtn" + cnt; _root.attachMovie( "menuBtn", mObj, cnt ); _root[mObj]._x = 5; _root[mObj]._y = 60 * cnt; _root[mObj].m_name.text = eval( "menu" + cnt ); _root[mObj].mUrl = eval( "url" + cnt ); _root[mObj].mTarget = eval( "target" + cnt ); _root[mObj].mMsg = eval( "msg" + cnt ); } // メニューボタン上でマウスボタンを離した時 _root[mObj].onRelease = function(){ getURL( this.mUrl, this.mTarget ); } // マウスオーバー時の処理 _root[mObj].onRollOver = function(){ eval(this._name).gotoAndStop( 2 ); with(_root) { objMsgWin = "newMsgWin"; attachMovie("msgWin", objMsgWin, 100 ); _root[objMsgWin]._x = this._x; _root[objMsgWin]._y = this._y + 25; tID = setInterval( msgWindow, 20, _root[objMsgWin], this ); } } // ポインタをメニューボタン外に移動した時 _root[mObj].onRollOut = function(){ eval(this._name).gotoAndStop( 1 ); _root[_root.objMsgWin].removeMovieClip(); clearInterval( _root.tID ); } // マウスボタンがメニューボタン外で離された時 _root[mObj].onReleaseOutside = function(){ eval(this._name).gotoAndStop( 1 ); _root[_root.objMsgWin].removeMovieClip(); clearInterval( _root.tID ); } } } stop(); 以下、テキストファイル &menu1=あいうえお& &menu2=123456& &menu3=MENU03& &menu4=MENU04& &menu5=MENU05& &menu6=MENU06& &menu7=MENU07& &menu8=MENU08& &url1=http://www.mdn.co.jp/& &url2=http://www.mdn.co.jp/& &url3=http://www.mdn.co.jp/& &url4=http://www.mdn.co.jp/& &url5=http://www.mdn.co.jp/& &url6=http://www.mdn.co.jp/& &url7=http://www.mdn.co.jp/& &url8=http://www.mdn.co.jp/& &target1=_blank& &target2=_blank& &target3=_blank& &target4=_blank& &target5=_blank& &target6=_blank& &target7=_blank& &target8=_blank& &msg1=現在のページです& &msg2=現在のページです& &msg3=現在のページです& &msg4=ここにメニュー04の説明が入ります。& &msg5=ここにメニュー05の説明が入ります。& &msg6=ここにメニュー06の説明が入ります。& &msg7=ここにメニュー07の説明が入ります。& &msg8=ここにメニュー08の説明が入ります。& 結果 『&menu1=あいうえお&』で出したい、「あいうえお」が表示できません。他の&menuと&msgの日本語は表示されるのですが、どこかおかしいでしょうか。 もしお時間ありましたら宜しくお願い致します。 ちなみにですが、今回のロジックのサンプルはhttp://www.mdn.co.jp/content/view/962からダウンロードしたものです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1の方も書かれていらしゃいますが、 「あいうえお」が表示されないのは、ActionScript や データ の問題ではありません。 メニューの字体を格好良く綺麗に見せるために、 また、 そのフォントが無いPCでも同じように表示させるために、 ダイナミックテキストにフォントを埋めこんであるのです。 そのフォントも、  大文字[A,,Z] (27文字)  小文字[a,,z] (27文字)  数字[0,,9] (11文字)  句読点記号[!@#%,,,] (52文字) のみです。 フォントを埋め込むと、 普通はそれ以外の文字がそのダイナミックテキストに表示されなくなります。 ですから 「あいうえお」 が表示されないのです。 上のようになっていることの確認方法です。 「ライブラリ」パネル を見てみて、 (もし 「ライブラリ」 パネルが表示されていない場合は、  「ウィンドウ」→「ライブラリ」にチェックを入れて、) その 「ライブラリ」 の中の 「MenuBtnMC」 をダブルクリックし、 「MenuBtnMC」 内のタイムラインの編集に移ります。 「MenuBtnMC」 内のタイムラインの レイヤー2 には、 「m_name」 というインスタンス名のダイナミックテキストがありますが、 それを選択して、 下のプロパティインスペクタ(プロパティパネル)を見てみると、 次のようになっていることが確認できると思います。 //////////////////////////////////////////////////////  A [Century Gothic] [14 ]∨ B I  [0 ]∨ [標準 ∨] [カスタムアンチエイリアス ∨] [埋め込み,,,] ////////////////////////////////////////////////////// この [埋め込み,,,] ボタンをクリックすると、 「文字の埋め込み」パネルが出てくると思います。 このパネルで、  大文字[A,,Z] (27文字)  小文字[a,,z] (27文字)  数字[0,,9] (11文字)  句読点記号[!@#%,,,] (52文字) がグレーになった選択状態で下の方には、  文字総数: 114 が表示されていると思います。 この 114文字 が埋め込まれてあるということで、 この 114文字 以外は表示されないということになります。 - - - - - - - - - - - - - - - - - - - - 解決策ですが。 一番の近道は、 埋め込みフォントを指定しないということです。 操作方法としては、 「文字の埋め込み」パネル で「埋め込まない」ボタンをクリックして「OK」します。 これで、 &menu1=あいうえお& によって 「あいうえお」 も表示されるようになります。 ただし、フォントを埋め込んでいませんから、 カスタムアンチエイリアス もかかりませんし、 Century Gothic が入っていない PC では違う代替フォントで表示されます。 また Century Gothic には日本語フォントが元から入っていませんから、 Century Gothic が入っている PC でも、 あいうえお は Century Gothic ではない代替フォント、デバイスフォントの「_等幅」あたりで表示されます。 もし、日本語も Century Gothic 同様に、 綺麗な字体でその字体が入っていないPCでも同じように表示させたい場合は、 少なくとも Century Gothic 以外の日本語が入ったフォントを指定して、 [埋め込み,,,] ボタンから日本語文字も埋め込むようにしなければなりません。 しかし、日本語フォントは文字数が莫大にあります。 全てを埋め込むとそれだけで2~3MBくらい以上の SWF になってしまいますから、 普通はそのようなことはしません。 するとしても、  日本語(かな) (318 文字) を追加することくらいが限度だと思います。 ちなみに、 最初に付いてくる p094.swf は 11.1 KB (11,423 バイト) ですが、 「文字の埋め込み」パネル で「埋め込まない」ボタンをクリックして「OK」したものをパブリッシュすると、 1.35 KB (1,385 バイト) の p094.swf になりました。 ほぼ 11,423-1,385 = 10,038バイト(約10KB) が、 埋め込まれた 114文字 分のテキストのアウトラインデータの容量です。 日本語を表示させる場合は、オーソドックスに普通通り、 フォントには 「_ゴシック」 や 「_等幅」 など前にアンダースコアの付いたデバイスフォントを指定して、 埋め込みをしない(デバイスフォントの場合はできませんが)という方法を取るのが無難な方法だと思います。 「ライブラリ」 のムービークリップ 「msgWin」 をダブルクリックしてムービークリップ内のタイムラインの編集に入ると、 レイヤー1 に 「msgStr」 というインスタンス名のダイナミックテキストがありますが、 こちらはオーソドックスに 「_ゴシック」 が指定されています。 アンチエイリアスなどはかかっていませんが、日本語フォントも使えます。 こちらが普通の方法です。

arubia50
質問者

お礼

とてもご親切な回答有り難うございました。「_ゴシック」 で対応しようと思います!日本語が出て来た時は、思わずニヤッと笑ってしまいました。 「プロとして恥ずかしくないFlashの大原則」はとても真似したい例がたくさんあるのは有難いのですが、少し初心者には、説明が少なく苦労するように感じました。 これからも負けじとスキルアップしていけたらと思います。 また機会がありましたら宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.1

もしかして「ダイナミックテキスト」の「プロパティ」で「_等幅」になどの日本語表示フォントにしていないとか・・・・・?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「.txt」に記入した、テキストとリンクURLをFlashに読み込む時に・・・

    こんにちは! Windows XP Flash MX 秀丸 「.txt」から  Flash内のテキストフィールドにテキストを  そのテキストの上に重なっているボタンインスタンスに  URLを指定させたいと考えています。 マウスが乗ったときにアクションの起こるボタンに、 外部からテキストとURAを設定したいということです。 ボタン構成は ボタンインスタンス「A」 ダイナミックテキスト「vtext」 ムービークリップ「B」ActionScript記入 ムービークリップ「over」マウスが乗った時のムービー まとめて「aaa」とシンボル化してあります。 「.txt」には以下のように記入 *** Index Setup *** &index=YAHOO!JAPAN& &url=http://www.yahoo.co.jp& &target=_blank& シーン1タイムライン1フレーム目には _root.aaa.A.onRollOver = function () { if (_root.aaa.overFlag != 1) { with (_root.aaa.over) { play(); } // End of with } // end if _root.aaa.overFlag = 1; _root.aaa.vText._x = -200; }; _root.aaa.A.onRollOut = function () { _root.aaa.overFlag = 0; _root.aaa.vText._x = 0; }; _root.aaa.A.onPress = function () { getURL(_root.aaa.A.url, _root.aaa.A.target); }; 「data」には onClipEvent (load) { if (_root.inText == null) { this.loadVariables("SingleButton_01a.txt"); } else { this.loadVariables(_root.inText); } // end if } この状態でターゲットパスを正確に記入しどの階層でも動くのですが、 シーン1のタイムライン上(どこでも)にstop();とアクションを記入 するとテキストのみが表示され、ボタンのリンクやムービーは止まってしまいます。この解決方法はないのでしょうか? よろしくお願いします。

  • 外部テキストからURLを読み込む方法

    昨日、外部テキストの読み込みでお世話になったものです。 言われたとおりにやってみたところちゃんとテキストは読み込めました。 次はURLを読みこもうと思い、みなさんの質問の参考になりそうなものを手がかりにやってみたのですが、うまくいきませんでした。 テキストファイルは『flash.txt』 シンボルはMCで フレーム1のアクションスクリプトは ―――――――――――――――――― System.useCodepage = true; myLoadVars = new LoadVars(); myLoadVars.onLoad = function(Success) { if (Success) { _root.text1.text = this.menu1; _root.url1 =this.url1; } }; myLoadVars.load("flash.txt"); --------------------------------------- となっています。 これでシンボルMCに on (release) { getURL("_root.url1"); } とやっているのですが、飛びません。 また前回と同じようにこちらのミスが多いのかもしれませんが、 知っている方がいましたらよろしくお願いいたしますm(__)m

    • ベストアンサー
    • Flash
  • Flashでテキストをランダム表示

    現在ウェブページで、javascriptを使って、テキストメッセージをランダム表示しています。 FlashのActionScriptを使い、同等のことを行いたいのですが、どうすればよいでしょうか。 なお、出来たら表示するテキストは外部から読み込ませたいです。 よろしくお願いします。 現在使っているjavascriptは以下です。 --------------------------------- <script type="text/javascript"> var MsgCnt=5; var Msg=[]; Msg[1] = "これは1番目のメッセージです。"; Msg[2] = "これは2番目のメッセージです。"; Msg[3] = "これは3番目のメッセージです。"; Msg[4] = "これは4番目のメッセージです。"; Msg[5] = "これは5番目のメッセージです。"; var ary=[]; for(var i=0;i<MsgCnt;i++)ary[i]=i+1; function arySort(){ ary.sort(function(){return Math.random()-Math.random();}); } var cnt=0;arySort(); function RandomMsg(){ if(cnt>=MsgCnt)cnt=0,arySort(); document.write(Msg[ary[cnt++]]); } </script> <script type="text/javascript"> RandomMsg(); </script> --------------------------------- 環境: windows vista flash pro 8

    • ベストアンサー
    • Flash
  • テキストスクロールの外部テキストファイルが表示されない

    こちらの過去ログから下記サイトを参考に、外部テキストファイルを読み込んで表示するテキストスクロールを作成しました。 http://www.flashiroha.com/script/as5.html flashで保存したswfファイルでは正常に表示されるのですが、作成したHTMLファイルにswfファイルを挿入すると外部テキスト部分が表示されず、サイドのスクロールボタンのみしか見えていません。 swfファイルと同階層にtextファイルは置いています。 そして、そのswfファイルをダブルクリックすると外部テキストファイルは表示されているにもかかわらず、htmlファイルでは表示されないのです。 足りないところは、補足説明も致しますのでよろしくお願い致します。 --------------------------------------------- ■htmlファイル <div id="textbox"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="545" height="150" title="テキストスクロール"> <param name="movie" value="common/flash/text.swf" /> <param name="quality" value="high" /> <embed src="common/flash/text.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="545" height="150"></embed> </object> </div> ■css #textbox { width: 545px; height: 150px; margin: 10px 0; } ■flash //テキストフィールドに this.loadVariables("text.txt"); //上向きボタンに on(rollOver){ _root.onEnterFrame = function() { _root.textbox.scroll -= 1; } } on(rollOut, releaseOutside) { _root.onEnterFrame = function() { _root.textbox.scroll -= 0; } } //下向きボタンに on(rollOver){ _root.onEnterFrame = function() { _root.textbox.scroll += 1; } } on(rollOut, releaseOutside) { _root.onEnterFrame = function() { _root.textbox.scroll += 0; } }

    • ベストアンサー
    • Flash
  • このソースで、仕組みについて教えてください。

    現在、スクリプトを勉強しているんですが、XMLから画像URLを呼び込むソースで調べ方が分からない箇所がありますので、どなたか解説して頂けないでしょうか? ●下記はどういった式になるのでしょうか? _root.total = this.childNodes[0].childNodes.length; ※totalの時 = このチルドノード[0]の子ノードを調べる? (自分の解釈です。この[0]はなんなのでしょうか?) ●例えばトータルの最後尾から逆再生させるにはどんな式が必要でしょうか? ※mainasu = cnt-1; (間違ってるとはおもいますが、内容をまだ反映できないので確認ができません) ●初期値 // ストップ stop(); // カウント用変数 cnt の初期値を設定 cnt = -1; // XMLインスタンスの作成 myXML = new XML(); // 余分な空白などを削除 myXML.ignoreWhite = true; // XMLデータロード時の動作定義 myXML.onLoad = function() { // 変数 total にノードのトータル数を取得 _root.total = this.childNodes[0].childNodes.length; // フレーム2でストップ _root.gotoAndStop(2); }; // 外部 XML ファイルのロード myXML.load("my_data.xml"); ●2フレーム // カウント用変数がノード数-1より小さいとき if (cnt<total-1) { // カウントを 1 加算 cnt++; } else { // それ以外は 0 に戻す cnt = 0; } // テキストフィールド 「number_txt」に 番号を表示 _root.number_txt.text = myXML.childNodes[0].childNodes[cnt].firstChild.nodeValue; // MovieClipLoaderクラスのインスタンスを作成 myMCL = new MovieClipLoader(); // ロード監視用のインスタンスを作成 myObj = new Object(); // JPEG ロード完了時 myObj.onLoadInit = function(target_mc) { // load_mc にリンクを設定 target_mc.onRelease = function() { getURL(myXML.childNodes[0].childNodes[cnt].attributes.linkURL, "_blank"); }; // 再生開始 _root.play(); }; // myMCL のリスナーとして myObj を登録 myMCL.addListener(myObj); // JPEG をロード myMCL.loadClip(myXML.childNodes[0].childNodes[cnt].attributes.jpegURL, load_mc);

    • ベストアンサー
    • Flash
  • 外部ファイルでテキスト、リンク先URLを指定したボタン

    FLASH MX WindouwsXPを使用しています。 宜しくお願いします。 外部ファイルよりテキスト、URLを読み込んだマウスアクションの ついたリンクボタンを作成しているのですが、URLが上手く 読み込めません。 ボタンの構成(重なり)は上から ・ボタンインスタンス ・ムービークリップインスタンス ・ダイナミックテキスト の順です。 ダイナミックテキストは LoadDataName = "topmenu26.txt"; loadVariables(LoadDataName, ""); _root.mm1.text = menu1; と読み込み正常に表示されています。 ムービークリップもボタンにActionScriptを記入することで 正常に作動しています。 しかしボタンのリンクだけが正常に作動しません。 ボタンには外部よりリンク先URLを読み込む為、レイヤー最上段の 1フレーム目に loadVariablesNum("topmenu26.txt", 0); と記入し、ボタンには on (release) {getURL(url1, target);} で外部ファイルのに記入したURLを読み込んでいます。 「シーン1」にこのボタンを設置すると、実際この方法で正常に 動きます。 しかし、このボタンを「シーン1」からシンボル内に設置すると 1フレーム目に記入した loadVariablesNum("topmenu26.txt", 0); と、ボタンの on (release) {getURL(url1, target);} がファイルを読み込まずリンクだけ動かなくなってしまいます。 フレームに記入した loadVariablesNum("topmenu26.txt", 0); の記入場所をシンボル内に変更したり、いろいろ試してみた のですが、解決できませんでした。 どのように変更すればシンボル内でもこのようなボタンが 設置できるのでしょうか? また、ボタンに外部からURLを設定する場合、他にどのような方法が あるのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • javaスクリプトでリンク付のスクロールテキストを作成したいのですが、

    javaスクリプトでリンク付のスクロールテキストを作成したいのですが、困っております。 参考サイトを探し、下記の状態まで作成しております。 <html> <head> <script language="JavaScript"> <!----- var msg = "テキスト"; msg = msg + "     "; msg = msg + "テキス2"; msg = msg + "     "; var speed = 200; function textDisp(){ msg = msg.substring(1,msg.length) + msg.substring(0,1); document.form1.text1.value = msg; setTimeout("textDisp()",speed); } var winTarget = "_self"; var url = "http://www.yahoo.co.jp/"; function textlink(){ open(url, winTarget); } //-----> </script> </head> <body bgcolor="white" onLoad="textDisp();"> <form name="form1"> <input type="text" name="text1" size="60" onclick="textlink();" style="cursor:hand;border:none;color:#ff3399;" onMouseover="this.style.color='#ffcc00'" onMouseout="this.style.color='#ff3399'"> </form> </body> </html> 表示時に”テキスト”と”テキスト2”を独立してそれぞれ、違うリンク先に飛ばすには どのようにすればよろしいでしょうか? また、空白をのぞき、リンク部分だけに下線をつけたいです。 CSSで指定をすると文字から空白まですべてに下線が付いてしまいます。 説明が悪いかもしれませんが、もしお分かりになる方おられましたら、参考サイトでも かまいませんのでお教えいただけますと幸いです。

  • テキストリンクで

    バナータグって、↓のとおりですよね。 <a href="サイトURL" target="_blank"><img src="画像URL" width="幅" height="高さ" alt="説明"></a> テキストリンクだと、<img~>のところがぬけますよね。 ですが、どうしてもテキストリンクで alt="説明" の部分をいれたいんです。 どうすれば表示されますか?? テキストリンクでは説明はでないのでしょうか?? 説明が分かりにくいかもしれませんが、よろしくお願いします。

  • 外部複数テキスト読み込みのについて

    外部複数テキスト読み込みのについて 写真のサムネイルボタンがあり、それをクリックすると外部の写真と、外部のテキストが読み込まれる物を作成しています。 サムネイルボタンが複数あるので、1つずつ表記するのではなくまとめたいと思って四苦八苦しています。 複数あるボタンは下記の様にまとまった記述にできました。 //ボタンクリックで写真読み込み for (var i_pic:int = 0; i_pic < 10; i_pic++) { this["btn"+i_pic].addEventListener(MouseEvent.CLICK, loadPic); } function loadPic(event:MouseEvent):void { var btn_name:String=event.target.name; this.menuPicture.source="menu/menu"+btn_name.charAt(3)+".jpg"; } しかし外部テキストが色々試しましたがうまくいきません。 for (var i_txt:int = 0; i_txt < 10; i_txt++) { this["btn"+i_txt].addEventListener(MouseEvent.CLICK, TextLoad); } function TextLoad(event:MouseEvent):void { var Ureq:URLRequest=new URLRequest("menu/menu_txt"+btn_name_txt.charAt(3)+".txt"); var loaderTxt:URLLoader = new URLLoader(); loaderTxt.load(Ureq); var btn_name_txt:String=event.target.name; setumei.text=loaderTxt.data; } 適当にやってここまでてきて、コンパイルエラーは出ないものの、いざボタンを押すと TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at _fla::Timeline_1/TextLoad() とでます。 どうやったら上手くいくのでしょうか? よろしくお願い致します。

  • リンクでのエスケープシーケンスで、半角スペースを混ぜたい

    変数が混じったURLとタイトルを、リンクタグにするのに、かなりエスケープで悩んで、ここまで記述できました。 _root.hoge = "<a href=" + _root.url + "target=\"_blank\">" + _root.title + "</a><br>"; でも最後に、_root.urlとtarget=の前に半角スペースを入れようと" "や、"\" \""などいろいろやりましたが、_root.hoge の中には、_root.url以降が切れて仕舞います。 どのようにエスケープすればよいのか教えてください。 宜しくお願いします。

    • ベストアンサー
    • Flash