• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フラッシュMXで外部テキストから複数種類出力する方法)

フラッシュMXで外部テキストから複数種類出力する方法

このQ&Aのポイント
  • 初心者のため、フラッシュMXで外部テキストから複数の種類を出力する方法を知りたい。
  • 日記のようなものを作成し、外部テキストを使用して簡単に増やすことができるようにしたい。
  • ボタンを押すと日記の内容が出力される仕組みを作成したいが、具体的な方法がわからない。

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

  • ベストアンサー
  • mat-21
  • ベストアンサー率56% (91/162)
回答No.3

そうですか(ToT).... ちょうど、今、私も仕事で同じスクリプトを書いているのですが、私はちゃんと動いてくれるのです...。 なぜ、エラーにになるかを考えてみたのですが、たぶん、このスクリプトは、タイムラインが1しかない設定で書いたので....。 もし、1よりも例えば、「タイムライン10まであって、それがループすると」えらーになると思います。 text01=今日は大変良い日でした。 &text02=今日は最悪の一日だった。 の「nikki.txt」を準備し、 スクリプト用のフレームのタイムライン1の○に、 System.useCodePage = true; this.loadVariables("nikki.txt"); スクリプト用のフレームのタイムライン10の○に、 this.gotoAndPlay(2); 上記は10までいったら2に戻るという設定。 つまり、2~10まで繰り返します。 テキストボックスは、新しいテキストボックスのフレーム(タイムライン1~10まであるキーフレーム)に、テキストボックスの変数をdiaryと設定。 functionではない方法では、 新しいボタン用のフレームを設け(タイムライン1に10まであるキーフレーム)、ボタンA・ボタンBを配置。 ボタンAのスクリプト on (release) { diary=text01; } ボタンBのスクリプト on (release) { diary=text02; } これで以上です。 ボタンAをくりっくすると、テキストボックスに「今日は大変良い日でした。 」 と表示され、ボタンBをクリックすると「今日は最悪の一日だった。 」に入れ代わる。再度ボタンAをクリックすると「今日は大変良い日でした。」に差し変わる。といった感じになると思うのですが....。 だんだん自信がなくなってきました。ごめんなさい。

kotora9
質問者

お礼

ありがとうございますっっっっっっっっ! できました!今教えていただいたやり方でやったらちゃんと動きました。 何がいけなかったのか今から調べてみようかと思いますが、まずはお礼をと思い書いてます。 何度もご親切にありがとうございました。

その他の回答 (5)

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.6

そこまでの経験がないので、わかりませんが、理論でスクリプトを書けば可能だと思います。 [diary]の変数があるダイナミックテキストのテキストボックスを作ってインスタンス名を[textBox]とします。次にそれをムービークリップ(シンボル)にし、インスタンス名を[clipDiary]と入力します。つまり、[clipDiary]のシンボルの中に[textBox]という名のテキストボックスがある、ムービークリップができたと思います。さらに、スクロールボタンを付ける場合は、そのシンボルの中に新規のフレームを設け、上下のスクロールボタンを配置します。その時、各スクロールボタンのシンボルのActionScriptは、 上へのスクロールボタン on (press) { Box=_root.clipDiary.textBox; if ( Box.scroll > 1 ) { Box.scroll--; } } 下へのスクロールボタン on (press) { Box=_root.clipDiary.textBox; if ( Box.scroll < Box.maxscroll ) { Box.scroll++; } } となります。[textBox]がある_root階層が[clipDiary]の中にあるためです。 これを、シーンに配置します。この配置したフレーム名を説明がしやすいように、[frame_TextDiary]としましょう。このフレームのキーをタイムライン1ー10(●____|)と仮定します。 次に前回作ったボタンを新規のフレーム[frame_button]に配置し、[frame_TextDiary]と同じようにタイムライン1ー10(●____|)と設定します。 次にActionScript用にフレーム[frame_ActionScript]を設けます。 これでフレーム数は3つで、タイムラインは1ー10までのはずです。 次に、ActionScriptを入力しましょう。 まず、[frame_ActionScript]のタイムライン1と2と10に空白のキーフレーム○を入れます。そして、ここが肝心です。 1の○に System.useCodePage = true; _root.clipDiary.loadVariables("nikki.txt"); だけです。もし、このタイムライン1上に[clipDiary]のシンボルがないとエラーになります。さらに、この2行目のスクリプトは、ただ単に、[nikki.txt]にあるテキストをダウンロードするだけで、表示するまでのスクリプトではありません。ようは、flashの中にテキストを蓄積するだけです。ダウンロードされたテキストの中の変数(XXX=)とテキストボックスの変数(XXX)が一致すればXXX=以降のテキストが表示されるというスクリプトは別にある訳です。 10の○には、 this.gotoAndPlay(2); これは、タイムライン10まできたら、タイムライン2に戻るというわけです。つまり、1から始まり、2~10を繰り返します。では、もし、1~10を繰り返したらどうなるでしょう。たぶん、もし、[textBox]に表示されている文章があったら、消えてしまうと思います。たぶん....。 System.useCodePage = true; も_root.clipDiary.loadVariables("nikki.txt");も、一回読み込まれればいいわけですから、1に戻る度、リロードされてしまいます。 次に、前回作ったボタンのスクリプトですが、[textBox]の_root階層が違うので以下のようにしなければならないと思います。 ボタンAのスクリプト on (release) { _root.clipDiary.textBox.scroll=1; _root.clipDiary.textBox.diary=text01; } ボタンBのスクリプト on (release) { _root.clipDiary.textBox.scroll=1; _root.clipDiary.textBox.diary=text02; } これでいいと理論上、思うのですが、ひょっとして、テキストボックスの_root階層が上にあると、よみこまれないかもしれません。自信はないです。動かなかったらごめんね。

kotora9
質問者

お礼

ずいぶんやってみましたが無理のようでした。やっぱり階層が上だとだめなんでしょうね。 でもムービークリップを使わないやり方ではちゃんとできました。 変な質問ばかりだったのに毎回丁寧に返答していただき、本当にありがとうございました。

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.5

コンポーネントは使用したことがないので、それに関する回答はできませんが、スクロールボタンの作成についてなら回答できます。 今までの設定をしたところで、スクロールボタンを配置してみましょう。 まず、スクロールボタン(ボタンシンボル)を上下用に2種類作成します。作成したら、ボタン用にフレームを設け、同じタイミング(タイムライン1)に配置します。上用のボタンシンボルのアクションスクリプトに on(press){ if (_root.textBox.scroll > 1) { _root.textBox.scroll--; } } と入力(この場合のtextBoxは、変数diaryのテキストボックスのインスタンス名textBoxの事です)し、 下用のボタンシンボルのアクションスクリプトに on(press){ if (_root.textBox.scroll < _root.textBox.maxscroll){ _root.textBox.scroll++; } } と入力します。 以上です。 これで、各スクロール用のボタンをクリックすると上下に1行ずつ動くとおもうのですが....... やり方はいろいろありますが、これが一番スクリプト的に簡単だと思います。

kotora9
質問者

補足

今まで使ってきたダイナミックテキストをスクロールをするテキストとしてムービークリップにしておきたいんですが、出来ますか? 上を参考にスクロール付きのテキストをムービークリップするところまでは出来たのですが(これはちゃんと動いています(^o^)/)、 また今まで動いていたボタンを押すと出力されるという処理がうまくいかなくなってしまいました。 ボタンのスクリプトは同じで、スクリプト用のフレーム(1)に onClipEvent (load) {   System.useCodePage = true;   this.loadVariables("nikki.txt"); } その後に onClipEvent (data) { かonClipEvent (mousedown) { あたりを使って読み込むのでしょうか? それともやはり10フレーム後とかに gotoを入れればいいのでしょうか? onClipEvent (data) { は読み込んだ後1度のみしかできないとかヘルプに書いてあるし!!! あーわからなーーーーーい! そもそもムービークリップに使用と考えたこと自身無理があるのかしら。。。。。。。。。。

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.4

それはそれは、良かったです。 アドバイスですが、日記の文字数が多いと、テキストボックスより下がはみ出てしまいますよね。たぶんそのとき、スクロール設定するとおもいますが、今までのスクリプトだと、途中までスクロールして、違う日にちの日記に差し変わった時、前の日にちの途中までスクロールした行の部分が差し変わったテキストの行になってしまうので、以下のスクリプトをたすと、差し変わってもいつも、各テキストの先頭になります。 もし、テキストボックスをスクロール設定にしたら、 テキストボックスのインスタンス名を仮に「textBox」とした場合、 on (release) { diary=text01; } ↓以下のようにすると on (release) { _root.textBox.scroll=1; diary=text01; } ※ボタンBも同じ設定で......。 つまり、この場合のscroll=1は、テキストボックス(_root.textBox)の1行目という意味です。

kotora9
質問者

補足

すごくタイミングのいいアドバイスとってもうれしいです。 今ちょうどスクロールバーをつけようとしていたところです。今回は初めてなのでコンポーネントを使ってやってみようとしはじめていたところなんですが(>。<) ダイナミックテキストにtextBoxという名前をつけコンポーネントのスクロールバーをテキストの線の上やくっつけてドロップしてみるのですがサイズも変わらなければ吸着もしません。プロパティーを見るとちゃんとTagetTextFieldにはtextBoxとなっているのに…。もちろんパブリッシュしても全く動きません。 なにか設定しなければいけないのですか?

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.2

すんません。 動作確認してないですが、下記に間違いがありました。 loadVariablesNum("nikki.txt", 0); ではなく、 loadVariables("nikki.txt"); でどうでしょう?

kotora9
質問者

補足

loadVariables("nikki.txt"); でするとパラメーターが足らないとエラーが出ます。 0を足すと以前と変わりないです。 trace文を入れてみたのですが、変数a,b,day,diaryどれもundefinedになっています。読み込みができていないということでしょうか? function使う以外に他に方法はありませんか?

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.1

まず、テキストファイルを作成しておきましょう。作り方はわかりますね。例えば --------------(←この線は関係ありません 以下同) text01=今日は大変良い日でした。 &text02=今日は最悪の一日だった。 -------------- と言った内容の「nikki.txt」というファイルを最後Flashを書き出すディレクトリと同じ階層に保存します。 次に、flashMXでテキストボックスを<ダイナミックテキスト>で<複数行>で<変数を「diary」>とし、描きます。ここで書き出しても、変数「diary」はないので白いままですね。 次に、ボタンを2つ作ります。各ボタンアクションスクリプトを以下の様にします。 ---ボタンAのスクリプト--- on (release) { textOpen(a); } ---ボタンBのスクリプト--- on (release) { textOpen(b); } ------------------------- これで書き出してもまだです。 次に、ActionScript用に空のフレームを設けます。そうすると当然1のタイムライン上に○がありますね。その○のタイムラインにActionScriptを入力します。 まず、文字化けが起こらないように、エキスパートモードで、下記のスクリプトを入力 ------------------------- System.useCodePage = true; ------------------------- そして、先ほど作った、テキストファイルを先にロードしておく設定で、同じスクリプト画面に続きで、 ------------------------- loadVariablesNum("nikki.txt", 0); ------------------------- と入力します。この段階では、「diary」変数のテキストがないので、テキストファイルはロードしますが、何も表示されません。 そして、いよいよ、各ボタンを押すとテキストが入れ代わるスクリプトを入力します。 引き続き同じスクリプト画面に ------------------------- function textOpen(day){ if (day == a) {diary = text01;} if (day == b) {diary = text02;} } ------------------------- とします。 これで書き出してみて確認して見てください。 いかかでしょうか?

kotora9
質問者

補足

やってみましたが動きませんでした。 テキスト用、アクション用、ボタン用と3つのレイヤーに分け、タイミングは全部同じでいいんですよね? アクションのレイヤーですが、 load… function… の後はonClipEvent等何もいらないのでしょうか?

関連するQ&A

専門家に質問してみよう