D0306041 複数の外部テキストスクロールをボタンで切り替え....
Name ルイ
Date 2003年06月04日 (水) 15時20分
Message ごめんなさい〜...引き続いて問題が...!
テキストを流れるようにスクロールすることは出来たのですが、テキスト表示部分のMCをメインタイムラインに置いて、メインタイムラインのボタンで他の.txtファイルを表示させたいんですが、どうしたら良いでしょうか。
_rootやthis、MCに名前をつけていろいろやってみたんですができません。
メインタイムラインのボタンで他のファイルを読み込ませるにはこの場合どうすれば良いんでしょうか??次々すいません、お願いします!!
Response 01
2003年06月04日 (水) 15時21分> ルイ 
三つ前のテキストフィールドのことでお聞きしたもののレスレスです!
間違えて新規投稿にしちゃいました...。面目ない。
Response 02
2003年06月04日 (水) 23時49分> 憲ちゃん 

scroll_txt7.fla sample1.txt sample2.txt sample3.txt

テキスト読み込み&表示用MCの前回サンプルのクリップアクションの最初の部分・・・

 onClipEvent (load) {
   loadVariables("profile3.txt","");
   num = 0;
 }

このMC自身が(タイムラインに登場して)読み込まれたとき「=onClipEvent(load)」、
太字で指定したファイル名の外部テキストデータを読み込むということでした。
ということは、その部分を変数にして、
ボタンから変数の中身(値)を代入するようにすれば上手くいきそうです♪

変数の中身とは、具体的には個々の外部テキストのファイル名・・・
今回のサンプルでは「sample1.txt」「sample2.txt」「sample3.txt」です。
拡張子の部分「.txt」は変わりませんから、ファイル名を入れる変数を仮に「textName」とし、
元のタイムラインに置いたボタンのボタンアクションで・・・

 on(release){
   textName = "sample1";
 }

として、テキスト読み込み&表示用MCの最初の部分を・・・

 onClipEvent (load) {
   loadVariables(_root.textName +".txt","");
   num = 0;
 }
※変数textNameは元のタイムラインにありますから、
※MCから見た場合、前に「_root」をつけて「_root.textName」とするのは既にお分かりですね♪

と書き換えれば、
 「_root.textName + ".txt"」とは、「sample1.txt」のことになります。

多分、ルイさんもこの辺ぐらいまでは考え付かれたと思いますが。。。上手くいかなかった!?(笑)

それは、MCのクリップアクションの「onClipEvent(load){処理;}」というのは、
MCがタイムラインに登場して読み込まれた(最初の)ときだけしか、
{ }内の処理を実行しないということを再度思い出してください(^^g/~~
一度、タイムラインに登場して指定したファイル名のデータを読み込むと、
そのMCがタイムライン上に存在し続ける限りは、以後、外からボタンで変数の値を変更しても
{ }内が実行されないので意味をなさないという訳です(^^;

どうしたら、もう一度実行させることができるか?
そのMCをタイムラインから一旦消滅させて、再登場させれば、
その瞬間、最初から読み直しますので「onClipEvent(load){ 処理;}」を実行します。
そのとき改めて変数textNameの値を取得し、
アクションどおり、そこで指定されたファイルを読みに行くことになります(*^-^*)

したがって、上のクリップアクションの書き換えのほかに、
@テキスト選択ボタンがクリックされたら、
A変数textNameに該当する外部テキストの「”ファイル名”」を代入し、
Bさらに、一旦MCをタイムラインから消滅させて、再び登場させる!
ということをする必要があります。

Bのやり方は、作品の中の他のオブジェクトとの関連や全体構成の流れ等によって
いろいろと工夫の余地がありますが・・・
他のことを考慮せず単純にこれだけのことをするだけなら、例えば・・・

図のように、「TXT選択ボタン」を追加して、全体に3フレームまでフレームを増やします。
アクションレイヤーの1フレームには、
最初にテキストフィールドに読み込むファイル名として、変数textName に代入します。
2フレームには「stop();」を入れて、タイムラインを停止。
3フレームには「gotoAndStop(2);」として、2〜3フレームのループにしています。

ここで、注目は・・・これまでご説明している「TXTスクロールセット」MCですね!!
1フレームのキーフレームに配置していますが、3フレームにはありません。

各TXT選択ボタンのボタンアクションは、上記アクションに「play();」を追加して、

 on(release){
   textName = "sample2"; ※ボタンによって「sample1」〜「sample3」
   play();
 }

このようにします。

最初にムービーが再生されたとき、1フレームのtextNameに最初のファイル名が代入され、
MCの「(load)」内の処理を実行、テキストフィールドに表示されて、2フレームで停止します。
選択ボタンをクリックすると、変数textNameに該当のファイル名が代入され、
同時にタイムラインが移動して、3フレームに行きます。
3フレームのタイムラインに「MCがない」ので、その瞬間一旦消滅。
「gotoAndStop(2);」で2フレームに移動すると、再び「MCが登場」し、
改めてMCの「(load)」内の処理からやり直すことになります♪~~~
Response 03
2003年06月05日 (木) 12時18分> 憲ちゃん  del
午前中、関連のお仕事をしていて、別の考えも思いつきました(^^g/~~
「(load)」内に入ることができなくても、そこに「function」を使って任意のメソッド
例えば「selectText()」で外部テキストを読み込むパターンを定義しておいて、
ボタンから、そのメソッドを呼び出して(実行するよう命令)もできそうです(*^-^*)
その場合は、上記のようにMCの再読み込みの必要はなく、
フレームの構成は、元もとのサンプルにボタンを追加するだけでよいので、
下図のようにぐっとシンプルになります。

「function」はMCに定義し、ボタンからそのメソッド(実効命令)を呼び出しますから、
メソッドの所在を指定するために、MCにインスタンス名を付けます。
ここでは仮に「textField」としています。

インスタンス「textField」に記載するクリップアクション・・・
以下の色文字、太字部分が前回との変更点です。

 onClipEvent (load) {
   function selectText (textName) { ←「selectText()」というメソッドを定義
     this.loadVariables(textName +".txt"); ←指定した外部テキストの読み込み開始
     num = 0;
   }

   selectText("sample1"); ←(MCが読み込まれた最初だけとりあえず)上記メソッドを実行
 }
 onClipEvent (data) {
   message.scroll = 1; ←新しいデータの読み込みが完了するたびに、1番上の行にリセット
   function mesScroll (num) {
     var nextScroll = message.scroll + num;
     if (nextScroll >= message.maxscroll) {
       message.scroll = message.maxscroll;
     } else if (nextScroll <= 0) {
       message.scroll = 1;
     } else {
       message.scroll = nextScroll;
     }
   }
 }
 onClipEvent (enterFrame) {
   mesScroll(num);
 }

各テキスト選択ボタンのボタンアクション(記載例は、真ん中ボタン)

 on (release) {
   textField.selectText("sample2")
 }

MCのインスタンス名を指定して(パス)、「selectText」メソッドの引数(ひきすう)に、
該当する外部テキストのファイル名を記載。
ファイル名は、文字列ですから””で括るのをお忘れなく!!

中身の方法は異なりますが、結果は上のサンプルと全く同じですから、
scroll_txt8.flaだけ置いておきます。
同じ結果を得るのに、方法は人により、その日の気分により異なるという良い見本ですね(笑)

中身の方法など、作品を見る人には関係のないことですから、
どちらが優れた方法とか、いうことはありません。
制作するコンテンツにより、使う場所により、自分自身がそのときひらめいた方法、
そのときの自分のレベルで理解しやすい方法で行うのが常にベターということです(^_-)-☆
Response 04
2003年06月05日 (木) 15時00分> ルイ 
有難うございます!
加えて質問です。.txtデータがnovelというディレクトリ(フォルダ)にある場合、指定するにはどうすれば良いですか??
上の単純に読み込ませるところまではできましたが、テキストデータをサイトの管理上ディレクトリを分けてしまいたいのです....。お願いします!
Response 05
2003年06月05日 (木) 17時00分> 憲ちゃん 
パスを指定するときの注意点として、
swfを埋め込んでいる「HTMLファイルの位置を基点とする」ということをおさえたうえで・・・
※swfとHTMLが同じフォルダにあるなら、このことは今は気にしないで読み飛ばしてください。

そのHTMLファイルからみて、該当のテキストが、

 ../novel/sample1.txt

というパスで表される位置に仮にあったとすると・・・
外部テキスト読み込みのアクションでも、そのまま

 this.loadVariables(”../novel/sample1.txt”);

と記載します。

上記のように変数で扱う場合、太字の部分がボタンからファイル名を代入される「変数」で
両端の青字は、変化しない部分なので・・・
これを、変化しない「”文字列”」と中の値が変化する「変数」部分に分けて「+」で繋ぎます。

 this.loadVariables(”../novel/” + textName + ”.txt”);

サンプルの上の例だと、変数textName は元のタイムライン上にありますから、
その場合は、さらに変数にパス(_root)をつけて、

 this.loadVariables(”../novel/” + _root.textName + ”.txt”);

(^^g/~~
Response 06
2003年06月06日 (金) 20時00分> ルイ 
毎日毎日お世話になります....!出来ませんでした...、、涙。
なんど書き換えたり、参考にしてやってもパスのエラー表示が出てしまいます。フォルダを変えなければうまくいくようなのですが...。
憲さんの作成されたフラッシュデータで、試しにサンプルテキストを別ディレクトリに入れて、上記にあるようにパスを指定してみたのです。それも表示されませんでした....!なぜでしょう。もうほとんど模写のように作ってしまっているんですが。お忙しいとは思います、申し訳ないのですが、別ディレクトリに入れた状態でのサンプルをつうくってもらえませんか?もう自分が情けないです...!
すいません!
Response 07
2003年06月06日 (金) 23時02分> 憲ちゃん 
そもそも「パスのエラー表示」というところから、ちょっと勘違いしておられるようですよ(笑)
それが出るということは”ムービープレビュー”でテストしているということでしょうね!?
制作ファイル(fla)を”ムービープレビュー”することとは、その場でswfが作成され、
それを再生して見ていることですから、この場合は、flaファイルが保存されているフォルダが
パスの基点ということになります。
「flaファイル」と、swfを埋め込む「HTMLファイル」とが、同じフォルダでないなら、
「パスエラー」が出て当然ですし、出ても一向に構わないのです(^^g/~~
普通、そこで出来上がった「swfファイル」をコピーして、
実際にホームページとなるべき「ローカルフォルダ(サーバーのディレクトリと対)」にペーストし、
それを埋め込んだHTMLファイルを開いて動作テストしませんか(*^-^*)
「パス」は、このHTMLファイルを基点として記載しているのですから、
ここからのパスに間違いがなければ、その段階で初めて繋がるのです♪

もう少しで完成ですね、頑張ってください(*^-^*)
Response 08
2003年06月06日 (金) 23時26分> 憲ちゃん 
もし、”../novel/”など、HTMLからの相対パスの書き方に自信が無い場合は・・・
(プロバイダのほうで特に制限を設けていないならですが)
 http//〜から始まる絶対パスで書けば、失敗はありません!
前の文字列のところを・・・

 ”http://ドメインURL/novel/” + textName + 〜

この場合には、HTMLファイルやswfが、どのフォルダにあろうとも成功します(^^g/~~
例えば・・・
先に、外部テキストだけを、サーバの該当フォルダにアップしておいて、
パソコンをネット回線に繋いだままにしておけば、制作段階の「ムービープレビュー」でも
OKということです♪
Response 09
2003年06月09日 (月) 21時13分> ルイ 
有難うございます!絶対パスとは全然考えもしませんでした〜!またも目からうろこです。ああ、ありがたい!また何かあったら頼りにしてます!お世話になりました〜!!

このページの先頭へ