Flashで外部テキストをマーキー表示する方法と文字数による問題について

このQ&Aのポイント
  • Flashのアクションスクリプトを使用して外部テキストを読み込み、マーキーのように左から右へ流れる表示を実現したいです。
  • 外部テキストの文字数によってテキストが隠れて表示されなかったり、繰り返しのタイミングがうまく掴めなかったりする問題があります。
  • テキスト枠のサイズを動的に調整する方法や、テキストの最後から繰り返す方法について教えてください。
回答を見る
  • ベストアンサー

外部テキスト読み込みでマーキーしたい

Flashのアクションスクリプトを使い、外部のテキストを読み込ませ、さらにそのテキストをmarqueeタグのように、左から右へ流れるように表示させ、それを繰り返したいです。 以下のページを参考にし、外部テキストを表示するところまでは問題なく出来ました。 http://www.mdn.co.jp/content/view/4566/111/ marqueeのようなスクロールは、ダイナミックテキストをモーショントウィーンでやりました。 ただし、読み込ませる外部テキストの文字数が毎回違います。 それにより、文字数が 1、読み込ませるテキストの文字数が毎回違うため、文字の長さによっては、文字が隠れて表示されない。 2、読み込ませるテキストの文字数が毎回違うため、文字の長さによってモーショントウィーンではうまく繰り返しのタイミングが掴めない。 ということです。 1、はダイナミックテキストで文字数がいなかる場合でもちょうどぴったりテキスト枠のサイズが指定できる方法はないでしょうか? 2、ちょうど読み込んだテキストの最後が消えた時点で、また頭から繰り返すにはどうすればよいでしょうか? 環境は、 Windows Vista Flash Pro 8 よろしくお願いいたします。

  • cnkozo
  • お礼率39% (158/402)
  • Flash
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • joy_28
  • ベストアンサー率84% (45/53)
回答No.3

cnkozoさん、 外部data.textは、今までのを使うとします。 以下で、左にメッセージが隠れたら、次のメッセージに変わり、ループします。 順番は、ロード時に、毎回変化しますが、一度ロードされた後は、変化しません。 //ここから var max:Number;//メッセージの数 mc._txt.text = "";//インスタンス名 _txtをMovieClip化し、ステージ上でのインスタンス名を、mcとする。ロード時は、ブランク mc._x = 20;//ステージより、少し、右寄りに配置 var n:Number = 0;//mess_array[n]、即ち、配列要素番号をnとし、初期値は、0とする var mess_array:Array = new Array();//配列定義 //System.useCodepage = true;//data.txtのコードが、UTF-8で記載されてない場合は、これが必要 var lv:LoadVars = new LoadVars(); lv.onLoad = function():Void { max = Number(this.kazu);//文字列の数値化 for (var i:Number = 0; i<max; i++) { mess_array[i] = this["mess"+i]; } Shuffle(mess_array);//下のカスタム関数 Shuffle()を動かし、mess_arrayをShuffle trace(mess_array); Move(mc);//mcを引数として、下のカスタム関数 Move(targt_mc)を始動させる }; lv.load("data.txt"); //lv.load("data.txt?"+getTimer());//サーバーアップ時は、ブラウザーのキャッシュ対策として、こちらを使用する。ローカルでは、エラー発生 //左に動かす関数を、カスタム関数化し、引数を、target_mcとする function Move(target_mc:MovieClip) { target_mc._txt.text = mess_array[n];//最初は、n=0が入り、左に隠れたら、n=1,2,3,4,0,1,2,3,4,0・・・・・となる target_mc._txt.autoSize = "left"; w_txt.text = "_txtサイズ="+target_mc._txt.textWidth; var speed:Number = 3; target_mc.onEnterFrame = function():Void { this._x -= speed;//左へ移動 if (this._x<(-this._width)) {//mcがステージの左に完全に隠れたら、 n++;//カウントアップし、 if (n>=max) {//max以上になったなら、 n = 0;//カウンターを元に、戻す } Move(this);//カスタム関数を、ここで、実行させる this._x = Stage.width;//ステージの幅に、mcの基準点を戻す } }; trace("n= "+n); } //配列を、Shuffleする関数を、カスタマ関数化して、見易くしておく function Shuffle(_array:Array) { var num:Number = _array.length; for (var i:Number = 0; i<num; i++) { var r:Number = Math.floor(Math.random()*num);// ランダムなindexを取得 // i とランダムなindexの中身を入れ替え var t:Number = _array[r]; _array[r] = _array[i]; _array[i] = t; } } //ここまで となります。

cnkozo
質問者

補足

joy_28様 お礼が遅くなり、失礼いたしました。 本職の方とお見受けしました。本当に最後まで手取り足取りありがとうございました。 私にできるのはお礼をここで申し上げることくらいしか出来ません。 本当にお会いして直接お礼を申し上げたいところです。 私も詳しくなったら他の人に教えられるようになりたいです。 本当にお世話になりました。

その他の回答 (2)

  • joy_28
  • ベストアンサー率84% (45/53)
回答No.2

cnkozoさん、 mc._txt.text = "";//インスタンス名 _txtをMovieClip化し、ステージ上でのインスタンス名を、mcとする。ロード時は、ブランク → ここが、出来てないからだと、推測します。 インスタン名 _txtをステージに配置しただけでは、動きませんから、これを、MovieClip化します。 その上で、ステージ上での、インスタンス名をmcと名付けてください。 結果、mcの中に、_txtが内包される形になりますから、_txtへのパスは、 ドット演算子を使って、 mc._txt.textというようになります。 この作業を省略すると、動きませんので、再チェック下さい。

cnkozo
質問者

補足

何度もありがとうございます。 読解力がなくて申し訳ございませんでした。 今回おっしゃるように設定し、無事成功しました。 本当にありがとうございました。 ここまで来てお礼したいのですが、もう一つだけわがままをお許し下さい。 今の場合だと、文字の切り替えは更新した場合になりますが、可能なら、文字が左に行って、消えたら、次に右から出てくる文字を毎回ランダムに切り替えるようにしたいです。 本当にすみません。なにとぞよろしくお願いいたします。

  • joy_28
  • ベストアンサー率84% (45/53)
回答No.1

cnkozoさん、 AS2.0の例です。 ・外部data.txt:其々、長さを変化させる &mess0=1番目のmess& &mess1=2番目のメッセージです& &mess2=3番目のメッセージと意見です。& &mess3=4番目& &mess4=5番目のMessageと意見とその事例です& &kazu=5& ・FLA側 //ここから var max:Number;//メッセージの数 mc._txt.text = "";//インスタンス名 _txtをMovieClip化し、ステージ上でのインスタンス名を、mcとする。ロード時は、ブランク var mess_array:Array = new Array();//配列定義 System.useCodepage = true;//data.txtのコードが、UTF-8で記載されてない場合は、これが必要 var lv:LoadVars = new LoadVars(); lv.onLoad = function():Void { max=Number(this.kazu);//文字列の数値化 for (var i:Number = 0; i<max; i++) { mess_array[i] = this["mess"+i]; } var r:Number = Math.floor(Math.random()*max);//0から4までの乱数発生 trace(r); mc._txt.text = mess_array[r];//r番目の配列要素を取り出して、mcに入れ子になった、ダイナミックテキスト _txtに代入 mc._txt.autoSize="left";//左基準で、サイズの自動調整を行い、 w_txt.text=mc._txt.textWidth;//その時の_txtサイズ、すなわち、mcの幅を取得し、参考に、w_txt.textに表示、必須ではない Move(mc);//カスタム関数を、mcを引数に実施 }; lv.load("data.txt"); //lv.load("data.txt?"+getTimer());//サーバーアップ時は、ブラウザーのキャッシュ対策として、こちらを使用する。ローカルでは、エラー発生 function Move(target_mc:MovieClip){//ごちゃごちゃするので、外出しで、カスタム関数化し、引数を、target_mcとする var speed:Number=3; target_mc.onEnterFrame=function():Void{ this._x-=speed;//左へ移動 if(this._x < -this._width) {//mcがステージの左に完全に隠れたら、 this._x = Stage.width;//ステージの幅に、mcの基準点を戻す } } } //ここまで となります。

cnkozo
質問者

補足

http://okwave.jp/qa5449549.html で質問した者です。 こちらにもご回答頂き、ありがとうございました。 また、返事が遅くなり、すみませんでした。 http://okwave.jp/qa5449549.html ではうまくいったのですが、今回のはうまくいきませんでした。 swfを書き出し、swfを開くと何も表示されません。 ダイナミックテキストを置いた場所にカーソルを持って行くと、テキスト選択になるので、何んらかのミス?があったのだと思います。 ダイナミックテキストのインスタンス名は「_txt」としました。 再度アドバイス頂けましたら幸いです。

関連するQ&A

  • 外部テキストの読み込み

    はじめましてよろしくお願いしますm(_ _)m 最近FLASHのアクションスクリプトを触るようになったのですが、どうしてもわからないことがあるので質問させて下さい。 やりたいのは…、 text01=あいうえお &text02=かきくけこ &text03=さしすせそ という外部テキストファイルがあってそれを1つのswfファイルが読み込まれるごとに違う値を表示したいです。イメージとしては下のような感じです。 <sample.swf>←ここではtext01の内容を表示 ・ ・ <sample.swf>←ここではtext02の内容を表示 ・ ・ <sample.swf>←ここではtext03の内容を表示 ・ ・ swfファイルを個別に用意し、外部テキストの変数をそれぞれ指定してやればできるのですが、それではswfファイルが複数になってしまうのと読み込みにも時間がかかるので(見出しに使いたいのでフォント埋め込みです)なんとか1つのswfファイルでできないか考えています。 FLASHではこういったことは可能でしょうか? 何かヒントだけでもいただけると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASH外部テキスト読込 タグを読まない

    FLASHの外部テキスト読み込み お世話になります。 アクションスクリプトがあまり分かりません(^^;) FLASH MXの外部読み込みで質問があります。 ボタンクリックで外部テキストとjpgを読み込みたいのです。 Scrollber(コンポーネント)のtarget TextFirldに ダイナミックテキストのインスタンス名を入れると スクロールはするのですが、txtファイル内のタグが 露出してしまいます。 target TextFirld、ダイナミックテキストからそれらを 除くとタグは効くようになるのですが、今度は長文でも スクロールバーが動かなくなります。 ◆ステージの1フレーム目 -------------------------------------- System.useCodepage = true; disp.condenseWhite = true; loadVariables("text/01.txt", "bun"); loadMovie("img/a.jpg", "jpeg"); ◆テキスト1ボタン -------------------------------------- on (press) { loadVariables("text/01.txt", bun); loadMovie("img/a.jpg", jpeg); } ◆テキスト2ボタン -------------------------------------- on (press) { loadVariables("text/02.txt", bun); loadMovie("img/b.jpg", jpeg); } ◆ムービークリップ名:jpeg ◆ダイナミックテキストインスタンス名:bun タグが効くようになるにはどうすればよいでしょうか? どうぞよろしくお願いしますm(_ _)m

  • 外部テキスト読み込み、横スクロールで流れる文字

    外部テキストファイルを読み込んで、横スクロールで文字が永遠とループで流れるものをFLASHで表示したいのです。 外部テキストの文字数なども読み込んで もし文字が多くても対応できるようにしたいのです。 私はFLASH8を使用しております。 なんとか宜しくお願いします><

    • ベストアンサー
    • Flash
  • FLASHで外部テキストの読み込みができません。

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

  • テキストスクロール

    Flash初心者です。 http://www.flashiroha.com/script/as5.html のサイトを参考にテキストスクロールを作成したのですが、 1.ボタンを押している間ずっとテキストをスクロールさせるようにするにはどうしたらいいでしょうか?(現状ワンクリック1行のスクロールでカチカチ押さなければならない。) 2.外部読み込みのテキストで、文字の色やサイズを部分的に変えたいのですがテキストファイルにhtmlを打ち込んでも全く反映されず、そのタグ自体が画面に表示されてしまいます。どうすればいいでしょうか?

  • 外部テキストの読み込み

    Flash lite1.1で、外部テキストの読み込みが実現できません。 text.txtファイルをswfと同じフォルダに作成し、中身を「text=あいうえお」にしました。 swfのほうでダイナミックテキストで変数を「text」にし、同じシーンのボタンに下のスクリプトを記述 しました。 // on (press) { loadVariables("text.txt",0); } // よろしくお願いします。

    • ベストアンサー
    • Flash
  • 外部テキストファイルの読込み

    FLASH初心者です。 外部テキストファイルに &text1=あああああ& &text2=いいいいい& ・・・ $text10=こここここ& のように書かれているファイルをFLASHで読み込んで flash側でこの文字をスクロールしたいのです。 スクロールする文字のスピードが、最初ゆっくり、終わりのほうは早く。というように「あああああ」「いいいいい」それぞれにそのようにスピードの変化をつけたいのです。変化は全て同じでよいのですが。 読み込んだ文字のスクロールが始まる前に、少しアニメーションがあって、その後変数分(今回は10回)分文字を スクロールさせたいのです。 そのようなことは可能でしょうか? どこか参照になるようなサイトはないでしょうか? 説明が下手でごめんなさい。

    • ベストアンサー
    • Flash
  • 外部テキストスクロールと時計のスプリクトを同時に

    FlashMXで下記の様な構成で2フレーム目にテキストスクロールと時計を置くと時計が止まったまま動かないんです。 全くの初心者なのでアクションはこちらのサイトからコピペさせて頂いたのものなので自分ではどうしていいか分かないのでどなたかご教授下さい。 ○○ 外部テキストスクロールアクション ○● 外部テキスト ○○ 時計アクション ○● 時計 時計アクション1フレーム目 this.onEnterFrame = function(){ var nDate = new Date(); var nHour = nDate.getHours(); var nMinutes = nDate.getMinutes(); var nSeconds = nDate.getSeconds(); tTime.text = ""; //テキスト内を空に // 時 if ( nHour < 10 ){ tTime.text += "0"+nHour+":"; }else{ tTime.text += nHour+":"; } // 分 if ( nMinutes < 10 ){ tTime.text += "0"+nMinutes+""; }else{ tTime.text += nMinutes+""; } 外部テキストスクロールのアクション1フレーム目 stop(); System.useCodepage = true; myLoadVars = new LoadVars(); myLoadVars.onLoad = function(Success) { if (Success) { _root.gotoAndStop(2); } }; myLoadVars.load("data.txt"); } 外部テキストスクロールのアクション2フレーム目 // marqMC の初期座標の保存 marqX = _root.marqMC._x; marqY = _root.marqMC._y; // marquee の初期横幅の保存 marqW1 = _root.marqMC._width; // marqMC に マスクmarqMask をかける _root.marqMC.setMask(_root.marqMask); // マスクmarqMask をmarqMC の初期座標にセット _root.marqMask._x = marqX; _root.marqMask._y = marqY; // マスクmarqMask の横幅を marqMC と等しくする _root.marqMask._width = marqW1; // marqMC を出発座標に移動 _root.marqMC._x += marqW1; // myLoadVars のデータを marquee.text に代入 _root.marqMC.marquee.text = _root.myLoadVars.mydata; // marquee のサイズを代入された文字長に合わせる _root.marqMC.marquee.autoSize = true; // marqMC の新しい横幅を変数化 marqW2 = _root.marqMC._width; //------marquee の移動 ------// // 1フレーム進む時間ごとに1回 { } 内を実行 _root.onEnterFrame = function() { if (_root.marqMC._x+marqW2>=marqX) { //※ここの部分↓でスピード変更 _root.marqMC._x -= 3; } else { _root.marqMC._x = marqX+marqW1; } };

  • 外部テキストのURLを読み込みたい

    外部テキストにあるURLを読み込みたいと思っています。 しかし外部テキスト内では「&」で変数宣言を区切りますので、URL中にある「&」文字でデータが区切られてしまいます。どのようにすればURLを1つのデータとして読み込む事ができるのでしょうか? 現在は以下のように読み込む処理のみ行っています。 お手数をお掛けしますがよろしくお願い致します。 ・FLASH MX ・アクションスクリプト内容 this.loadVariables("data.txt"); trace(this.data); ・テキストの内容(data.txt) data=http://aaa.net/aaa/aaa.cgi?mode=link&id=123

    • ベストアンサー
    • Flash
  • 外部テキストに書いたHTMLタグがそのまま表示されてしまう。

    現在、Flash作成フリーソフト「Suzuka」で、Flashを作成中なのですが、 どうしても分からない箇所がありますので、アドバイスをよろしくお願いします。 以下のことでつまずいてます。 ダイナミックテキストに外部テキストを読み込ませることは出来るのですが、 外部テキスト内に書いているHTMLタグが、そのまま表示されてしまい、困っています。 外部テキストの内容はこんな感じです。 total=4& &txt0=<font color="#ff0000">文字の色を赤に変えたいです</font>& &txt1=あいうえお& &txt2=かきくけこ& &txt3=さしすせそ テキストのプロパティで「HTML」にチェックをいれてプレビューまたは、パブリッシュ後にブラウザで確認しても、 どうしてもタグが解釈されずに、そのまま<font color="#ff0000">文字の色を赤に変えたいです</font>で表示されてしまいます。 Suzukaのヘルプには、<font>タグがサポートされていると書いてあるのですが…。 Flashに詳しい方、アドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Flash

専門家に質問してみよう