Flash/アクションスクリプトで日替わりテキストの読み込み方法

このQ&Aのポイント
  • FlashMXを使用しアクションスクリプトで日替わりで異なるテキストを読み込む方法を探しています。
  • ダイナミックテキストに「今日は〇月〇日です。」という文字列が読み込まれず困っています。
  • ご指導をお願いします。
回答を見る
  • ベストアンサー

Flash/アクションスクリプトで日替わりテキストの読み込みの仕方

こんばんは。pmpmpm5と申します。 質問集で検索しましたが、同じ質問がヒットしなかったので 今回質問させていただきます。 FlashMXを使用しアクションスクリプトで 「日替わりでちがうテキストを読み込む」方法を探しています。 以下、実際のスクリプトです。 ■ダイナミックテキスト(変数名:test)を含む ムービークリップ(インスタンス名box)をメインフレームに配置 ■メインフレームにフレームアクション myDate = new Date(); Month = myDate.getMonth()+1; Date = myDate.getDate(); message = "m"+ Month +"d"+Date; ■boxのクリップアクション onClipEvent (load) { this.loadVariables ("days.txt"); } onClipEvent (data) { //this.test = m12d22; this.test = this[message]; ■外部テキスト(days.txt) m12d22=今日は2月12日です。 m2d13=今日は2月13日です。 このように組み込んだのですが、ダイナミックテキストには 「今日は〇月〇日です。」という文字列が読み込まれず 困っています。 どうか、ご指導お願いいたします。

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

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

まずテキストのデータ形式ですが, ご質問のテキストデータやスクリプトを見る限り, 勝手に「改行」を「データの区切り」と決めていらっしゃいますね。 どこにもそんなルールはありませんよ。 もしそうしたいのでしたら 「改行コードがデータの区切りである」 という定義をするためのややこしいスクリプトが必要になります。 普通はそういうものは定義しません。 Flashのルール通り「&」をデータ区切りとします。 Google や Yahoo! などで何かを検索したとき, URLアドレス欄に見える URLクエリ と同じルールです。 変数名A=値A&変数名B=値B&変数名C=値C … これが Flash で外部テキストデータを扱うとき, 1つのファイル内に複数の変数と値を入れる基本ルールです。 しかし, これではデータが横にひたすら長くなるので人間が読み書きしにくいです。 改行を入れれば良いのですが, 単に改行を入れだけでは「改行コード」までが 変数名 または 値 に混入してしまいます。 そこで改行コードをデータとして無視されるように改行前後に「&」を入れます。 ですから一般的には次のようなデータ形式にします。 変数名A=値A& &変数名B=値B& &変数名C=値C& … 具体例は次のような感じにするということです。 m12d22=今日は12月22日です。& &m12d23=今日は12月23日です。& &m12d24=今日は12月24日です。 ややこしいと思われる場合は, 最初と最後にも「&」を入れても良いです。 &m12d22=今日は12月22日です。& &m12d23=今日は12月23日です。& &m12d24=今日は12月24日です。& ********* 外部テキストの文字コードに関してですが, スクリプト中に次の1行が見当たりません。 System.useCodepage = true; この1行をメインのフレーム1の最初辺りに入れておくと, 外部テキストが Shift-JIS として解釈されます。 入れておかない場合は, 自動的に UTF-8 として解釈されます。 これは FlashPlayer6 以上用の SWF をパブリッシュする場合の仕様変更でこうなりました。 Flash MX では FlashPlayer6 用の SWF をパブリッシュするのがデフォルト設定ですからこの点が要注意です。 ********* ターゲットパスに関してですが,これがうまく行かない第一原因です。 まず確認です。 階層などは次のようになっているのですよね。  _root ←myDate = new… を書いた   └box ←onClipEvent (load)… を書いた     └ テキストフィールド変数名「test」 このようになっているのだとすると,次のの1行ではうまく行きません。 this.test = this[message]; これだと, ムービークリップbox 内にある変数 message を参照してしまいます。 message はムービークリップにある変数ではなくて _root にあるはずです。 したがって,次のように変更する必要があります。 this.test = this[_root.message]; または this.test = this[_parent.message]; これでうまく行くはずです。 ===================== 以下はうまく行く行かないではなくて,好ましくない箇所の指摘です。 ****************** 1つめ Date = myDate.getDate(); 変数 Date が Dateオブジェクト(クラス名)とかぶっています。 例えば date_num のような変数名にする方が良いです。 ****************** 2つめ テキストフィールドに変数名を付けるのは,Flash Player 5 までの仕様で, Flash Player 6 以降の SWF をパブリッシュする場合は非推奨の事項になっています。 Flash Player 6 以上用の SWF をパブリッシュする場合は, テキストフィールドに変数名は付けずに,「インスタンス名」を付けて, その text プロパティ や htmlText プロパティに値を代入するようにします。 したがって,ご質問の場合は, box の中にあるダイナミックテキストの変数名 test を消して, その ダイナミックテキスト に test というようなインスタンス名を付けるようにします。 こうした場合, ムービークリップに書いた onClipEvent (data) {} は次のように変更する必要があります。 onClipEvent (data) { this.test.text = this[_root.message]; } ********* ダイナミックテキスト に変数名を付けた場合は, 自動的にその変数名の値が表示されますが, 上のようにダイナミックテキストインスタンス名のみを付けた場合は, 自動的に値は表示されません。 したがって必ず ○○.text = △△ のように ActionScript で値を代入する必要があります。 ご質問の場合は, たまたまムービークリップの中にテキストフィールドがあるから良いのですが, テキストフィールドは_rootの直下にあるかもしれません。 その場合は onClipEvent (data) {} は使えないか, これを強引に使う場合,わざわざムービークリップを作成しなければならなくなります。 これは変です。 変ですし使い勝手が悪いです。 そこで登場したのが LoadVarsオブジェクト です。 この LoadVars について補足します。 ご質問のスクリプトを LoadVarsオブジェクト を使って書き替えてみます。 まず,ムービークリップに書いた onClipEvent (load) { this.loadVariables("days.txt"); } onClipEvent (data) { this.test.text = this[_root.message]; } のようなスクリプトを全て消します。 そして _root のフレームのスクリプトを次のように書き替えます。 ---------------------------------------- myDate = new Date(); month_num = myDate.getMonth()+1; date_num = myDate.getDate(); message = "m"+month_num+"d"+date_num; // // 外部テキストの文字コードが Shift-JIS の場合は入れる //System.useCodepage = true; // // LoadVarsオブジェクトを作成 myVars = new LoadVars(); // // myVars に外部テキストがロードされたときの動作を定義 myVars.onLoad = function(Seikou) { // ロードに成功したら if (Seikou) { // box 内の test に外部テキストの変数 message の値を表示 box.test.text = myVars[message]; // ロードに失敗したら } else { // box 内の test に「ロード失敗」を表示 box.test.text = "ロード失敗"; } }; // // myVars に外部テキストを ロード myVars.load("days.txt"); ---------------------------------------- FlashMXではこのような感じにするのが普通です。 これだと _root にインスタンス名だけを付けたダイナミックテキストがあった場合でも, それと無関係なムービークリップを作成せずに済みます。 また 全てのスクリプトがフレームに書けるため一目瞭然になります。 また message の参照もこの階層で良くなりますからややこしくありません。 さらに ロードエラー も拾えます。 絶対このように LoadVars を使用した方が良いというわけではありません。 適材適所ですがこのような書き方にすると楽ではないかと思いましたので補足させていただきました。

pmpmpm5
質問者

お礼

BlurFiltanさん、こんばんは初めまして。 この度は素早い返答と的確なアドバイスをありがとうございました。 お返事が遅くなってしまいましたが、早速アドバイス通りスクリプトを修正してみたところ、問題なくテキストを読み込むことができました。本当にありがとうございます。 足りない点がたくさんある中、わかりやすい説明をありがとうございました。LoadVarsも初めて耳にする単語でしたが、このようなスクリプトの記述の仕方もあるのですね。大変勉強になりました。 困り果てていたので本当に助かりました!ありがとうございました!

関連するQ&A

  • FLASHで外部テキストの読み込みができません。

    フラッシュを勉強中の者です。 外部テキストの読み込みの所でつまずいています。 新規ファイルで、ムービークリップのシンボルを作成し、その中にダイナミックテキストを配置。 で、変数をcontentにしました。 外部テキストの名前は「test.txt」 その中には、「content = あいうえおかきくけこ」と記述。 で、ムービーリップのアクションに onClipEvent(load){ this.loadVariables("test.txt"); } と、書いました。 これをムービーのプレビューをすると「あいうえおかきくけこ」が書かれると思うのですが、なぜかそうなりません…。 一応「content = "あいうえおかきくけこ"」とダブルコートで囲んでも無理でした。 なぜなんでしょう?よろしくお願いいたします。

  • 【フラッシュ】外部テキストの読み込み

    よろしくお願いします。 いま、作っているフラッシュで外部テキスト(中身はサーバ名,www.~.com)を読み込んで それを参照してサーバからデータを取得するというスクリプトを作っています。 それで、めでたく完成したのですが、ローカル環境(swf,txtともにローカルマシンにある)で 確認するとうまく動くのに、サーバにアップしてみるとうまくいきません。 失敗の原因として、 1)そもそもtxtの読み込みがうまくいっていない。 2)読み込んでるが、それをswf内部でうまく参照できていない。 の二つがあると考えて、読み込んだデータを表示するテキストフィールドを用意して確認したのですが、 ちゃんと読み込んでいるのです。 すると、後はその取得データを参照するスクリプトがおかしいということになりますが、 そちらはローカル、サーバ上ともにまったく同じです。 いったい何が原因でしょう。 フラッシュの構造的には ■1フレーム目  フレームアクション:stop(); //いったん停止してデータを読み込む var theSvr;//サーバ名を格納し実際に参照する変数  配置MC:内部にsvrNameという変数を持つ、データ読み込み用のMC      onClipEvent(load){ this.loadVariables("sv.txt"); }      onClipEvent(enterFrame){ _root.theSvr = this.svrName; _root.gotoAndPlay(2);//フレームアクションのストップを解除して再生 }       ■2フレーム目以降の読み込みデータを使ったアクション  getURL(_root.theSvr);//基本的に、getURLに使う程度です。。 わかりづらいかもしれませんが、よろしくお願いします。

  • 移動に関するアクションスクリプトがわかりません

    あるムービークリップをクリックした時にX座標を0の位置にもっていきたいのですが、アクションスクリプトをどう書いたら良いのか分かりません。 瞬間的に移動するのではなくスーッという感じで動かしたいのです。 on (release){ this._x = 0} と onClipEvent(enterframe){ this._x += -2 } これを融合させたような感じにしたいのですが、書き方が分かりません。メインのタイムラインに動くフレームをつくりgotoAndPlay()で飛ばしても良いんですが、アクションスクリプトだけで作ることは不可能でしょうか?

    • ベストアンサー
    • Flash
  • Flash 外部テキスト読み込み 配列

    Flash初心者です。PHPスクリプトは多少組める程度です。 現在、Flashであらかじめ用意しておいた%をテキストに,区切りで保存しています。txtファイルには地域別に1日~31日までの%を記述してあります。 テキストは読込めたのですが、splitでうまく分割できません。日別(本日の日にち)で出力させたいのですが配列が不慣れです。どなたか教えてください。 //文字コード設定の変更 System.useCodepage = true; //現在月日の取得 now_date=new Date(); tmpYoubi = "日月火水木金土"; month = now_date.getMonth()+1; day = now_date.getDate(); weekday = tmpYoubi.charAt(now_date.getUTCDay()); //率の取得 this.loadVariables("sa" + "_" + month + "." + "txt"); ritu = sapporo.split(","); this.loadVariables("se" + "_" + month + "." + "txt"); ritu = sendai.split(","); sapporo =ritu[day]; sapporo.text = "sapporo"; stop ();

    • ベストアンサー
    • Flash
  • アクションスクリプトについて

    今、毎月決まった日になったら表示させるというのをやりたくて がんばってみたのですがいまいちわかりません。 スクリプトは onClipEvent(load){  stop();  function update(){   var nowDate = new Date();   var Day = nowDate.getDate();   if (Day == 1){    this.gotoAndStop("today");   }else if(Day == 16){    this.gotoAndStop("today");   }else    this.gotoAndStop("a");   } } onClipEvent(enterFrame){ update(); } こんな感じです。(まったく自身がありません。) いまいち変数のところがわかりません。オブジェクトの生成とか・・・ PCの日付の方は変えてありますが、表示がされません。 今後は「次回の何回目は後何日」って感じに出来たらと思っています。 これについてもよかったら何かアドバイスお願いします。

  • フラッシュでtextファイルを読み込ませるアクションで問題!?

    私はフラッシュを始めたばかりの素人です。 フラッシュをいろいろとHPに組み込みたいと思いました。が、メンテナンスするのがいちいち面倒なのでどうにかできないかと考えた結果、textファイルを読み込ませんるという方法でした。  もちろんtextファイルで編集できるのは文字だけだとわかっていますが、少しはメンテナンスがしやすくなりますのでとてもよいと考えました。 やってみて問題がおきました。 結果は「やけにSWFファイルが重くなる(2Mちょっと)になることと、ネット上で動かすと表示されなこと」です。 いろいろ試しましたが、私が思うにtextファイルを読み込むアクションスクリプトを使うとやけに重くなってしまうような結果になりました。 textファイルに読み込ませる文章はせいぜい40文字程度でしかないのにもかかわらずローカルで表示させた場合に出来るSWFファイルの要領が2.1Mにもなりました。 それをネットにアップさせて表示させようとした場合は接続が永遠に続き結局表示することが出来ません。 textファイルを読み込ませるための何かコツが必要なのでしょうか? また、このような物と認識すればよいのでしょうか? どうか具体的なソース、アドバイスをいただけないでしょうか。お願いします。 ▼読み込み時に使用したアクションスクリプト onClipEvent(load){ this.loadVariables("oyamanew.txt"); }

  • FLASH ダイナミックテキスト 外部ファイル

    初めまして。 現在外部ファイル(mNO.txt 内容:a=1&b=2&c=3&d=4&e=5)を アクションスクリプト(レイヤーにloadVariablesNum("mNO.txt", 0);)で読み込み、 外部ファイルに書き込まれている値をダイナミックテキストで表示させたいのですが、 外部ファイルは読み込まれますが、変数の値がうまく表示されません。 方法は、 テキスト入力をして、これをダイナミックテキストに変換・変数(no1)を設定し、シンボルに変換(ムービークリップ)、 レイヤーに上のアクションスクリプトを入力。 ムービークリップにアクションスクリプト、 (onClipEvent (load) { no1 = a + "号室"; }) を入力。 以上です。 デバッグすると 左上に _lebel0. L_lebel0.instance1 のように表示されますが関係あるのでしょうか。 バージョンは6です。 説明が下手で申し訳ございません。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash判定アクションスクリプトの記述を教えてください。

    仕事の都合でFlash(Versionは8)を扱わなければいけなくなり只今勉強中兼HP製作中です。 行き詰まっているので教えてください。 現在、シーン1のタイムライン1フレーム目にいます。 ステージ上には、 ムービークリップが4つ(名前 m_A , m_B , m_C m_D)配置されています。 ボタンが5つ(名前 b_A , b_B , b_C , b_D , b_Z)配置されています。 ボタンb_Aには on (release) { with (_root.m_A) { play(); } } と記されていて、ボタンを押すとm_Aは再生されて10フレーム目でストップします。 ボタン B~D も同様にボタンを押すとムービークリップB~Dもそれぞれ再生されて10フレーム目でストップします。 ムービークリップ m_A~Dのフレーム10の中には、さらにボタン b_Xがあり、 それを押すとさらに再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップします。 シーン1のタイムライン1フレーム目に配置されている、ボタンb_Zを押すと、 ムービークリップ m_A~Dのタイムライン1フレーム目にいるものはそのままで、 そして、10フレーム目でストップしていたものは、 再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップになったところで、 (m_A~Dが全てタイムライン1フレーム目に行ったところで、) シーン1のタイムライン1フレーム目から再生されて、 タイムライン10フレーム目でストップといった命令を書きたいのですが、 どうやって指定してやればよいでしょうか? 多分、if文等を使用するんでしょうが、さっぱりわかりません。 詳しく教えていただければ、幸いでございます。

  • アクションスクリプト 

    下記のアクションスクリプトで徐々に目標値へ近づけたいのですが、 うまくいきません。 わかる方よろしくお願いします! btn.onRollOver = function() { clearInterval(myID); for (var i:Number = 1; i<=Max; i++) { if (this.id != i) _root["btn"+i].thumb._y = 0 _root["btn"+i].name_txt._y = 20; _root["btn"+i].frame_mc._y = -2; _root["btn"+i].frame_mc.transform.colorTransform = downColor; } else { this.thumb._y = -5 this.name_txt._y = 15              this.frame_mc._y = -6 } }

    • ベストアンサー
    • Flash
  • Flashの外部テキストのフォントを変えるには

    Flashで外部テキストを読み込むものを作っているんですが、始めたばかりで初心者です。 onClipEvent (load) { Rnd = Math.floor(Math.random()*1000); this.loadVariables("http://www.aaaaaaa/test.txt?"+Rnd ); this.onData = function() { msgArea.text = test1; }; } これでFlash自体は動くようになったのですが、文字が小さかったため大きくしたいです。 フォントサイズを変えようと思い、 this._fmt.size = 24; を5行目に追加してみたのですが、反応がありません。 シンボルの状態のためか、プロパティを見てもフォントの項目が見当たらないです。どうしたら変えれるのでしょうか?