FLASH内MCの表示・非表示について

このQ&Aのポイント
  • FLASH内で外部テキストを読み込む際、そのテキストによってMCを表示・非表示させたい場合、特定の変数に基づいて判別することが可能です。
  • 具体的には、読み込んだテキスト内の特定の変数の値をチェックし、条件に基づいてMCを表示・非表示にすることができます。
  • ただし、ソースコード内で判定する変数名や値を適切に設定する必要があります。
回答を見る
  • ベストアンサー

FLASH内MCの表示・非表示

どなたか教えて下さい。FLASHにて外部テキストを読み込み、その読み込む文によってMCを表示・非表示させたくて下記のようにソースを書いたのですが、変数のw03の部分をakairo以外の文字にしてもaka(MC)が表示されてしまいます。。。 akairo意外の文字にした場合、ao(MC)が表示になるようにしたいのですが、どなたか教えて頂けると幸いです。よろしくお願いします。 this.stop(); System.useCodepage = true; g01.loadVariables("test.txt"); //外部読み込み if (g01.w03 == akairo) { //もしg01内のダイナミックテキストw03の読み込んだ文字が akairo なら aka._visible = true; //aka(MC)を表示 ao._visible = false; //ao(MC)を非表示 }else{ //そうでなかったら ao._visible = true; //ao(MC)を表示 aka._visible = false; //aka(MC)を非表示 } 外部テキスト(test.txt)は w01=ワード01&w02=ワード02&w03=akairo になっています。

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

問題が2点、あります。 ActionScript では、外部から値や画像などのファイルを読み込む場合、「○○を読み込め」という命令を出したら、読み込みが終わるまで待たずに、すぐに次の命令が実行されます。 しかし、どんなに単純なテキストファイルであっても、たとえ通信回線を介さないローカル環境であったとしても、ファイルを開き、値を読み込み、内容を解析してファイルを閉じる処理がほんの一瞬で終了することは、まずあり得ません。 読み込みが完了する前に読み込まれるはずのものを利用しようとすると、思わぬ不具合の原因になります。 簡単に言いますと、loadVariables 等の読み込みの命令のすぐ後に、読み込まれるはずの変数などを利用するスクリプトを書いても、正常に動作しない場合の方が多いということです。 ですから、ActionScript で何かを読み込む場合は必ず、”読み込みが完了した後で読み込んだものを利用する”という形でスクリプトを書きます。 ご提示のスクリプトですと、読み込みの完了を待つ部分が抜けているようです。 テキストファイルに  変数名=値&変数名=値 という形で記述して読み込むと、読み込みが完了した後でテキストファイルに書かれていた名前の変数が作られて、指定の値が格納されます。 スクリプトで予め同名の変数が作られている場合を除き、読み込みが終わる前までは、その名前の変数は存在していません。 存在しない変数の中身を見ると、” undefined ”(未定義)という値が入っているものと見なされます。 つまり、ご提示のスクリプトですと、if 文の条件にある変数 g01.w03 には undefined という値が入っているものと見なされた状態で、条件の判断が行われてしまいます。 もう1つの問題点は、g01.w03 の値を判別する部分です。 外部テキストから読み込まれた値は、文字列になります。 変数にある文字列が入っているかどうかを判別するには、  if( g01.w03 == "akairo" ) ↑このように、判別したい文字列を " " で囲みます。  if( g01.w03 == akairo ) と書くと、g01.w03 と変数 akairo に入っている値が同じであるかどうか、という条件になります。 おそらく akairo という名前の変数は存在しておらず、変数 akairo の値が未定義= undefined になっているかと思われます。 すると、  if( g01.w03 == akairo ) ↑この if 文は  if( g01.w03 == undefined ) と同じ意味になります。 読み込みの完了を待たずに g01.w03 の値を見ようとすると、g01.w03 がまだ存在していないために、g01.w03 の値は、テキストファイルに何が書かれていたかに関係なく undefined と見なされます。 変数 akairo も存在しておらず undefined だとすれば、ご提示のスクリプトですと、w03 の内容が何であれ、必ず if 文の条件が成立してしまいます。 そのため、テキストファイルの w03 の部分に” akairo ”以外の文字を指定しても、常に aka のムービークリップが表示されることになります。 ----------------------------------------------------------- 読み込みの完了を待つ方法はいろいろありますが、loadVariables で読み込む時は、読み込みが終わった時に発生する” data ”というイベントを利用して読み込みの完了を検出することができます。 ステージにムービークリップシンボルのインスタンス ao ・ aka と g01 があり、外部テキストファイル test.txt の内容は  w01=ワード01&w02=ワード02&w03=akairo とします。 test.txt を読み込み、変数 w03 の値が” akairo ”の時は aka のムービークリップを、それ以外の時は ao のムービークリップを表示するスクリプトは、大体、次のようになります。 このスクリプトは、メインのタイムラインに設定してください。 FlashPlayer 6 以降、ActionScript 1.0 または 2.0 で動作します。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うと、シンタックスエラーになります) /*****************************************************/  //タイムラインを止めておく  this.stop();  //aoとakaのムービークリップをとりあえず非表示にしておく  ao._visible = false;  aka._visible = false;  //読み込みが終了した時の処理  g01.onData = function()  {   //色の指定を判別   //変数w03の内容が”akairo”ならakaのムービークリップを表示   if( g01.w03 == "akairo" )   {    aka._visible = true;    ao._visible = false;   }   //それ以外の時はaoのムービークリップを表示   else   {    ao._visible = true;    aka._visible = false;   }  };  //Shift-JISで読み込む  System.useCodepage = true;  g01.loadVariables( "test.txt" ); /*****************************************************/ ActionScript では、テキストファイルだけでなく、画像や swf ファイル、CGI といってサーバーで実行されるプログラムが生成する値なども読み込んで利用することができます。 何を読み込む場合でも、読み込みの完了を待ってから読み込んだものを利用することが大切です。 読み込みにかかる時間は読み込むものや回線・サーバーの都合などによって変動するため、ActionScript には、読み込みが終わった時に合わせてスクリプトを実行できる仕組みが用意されています。 読み込み完了を待つ処理は、どんな命令を使って読み込みを実行したかによっても作り方が違います。 上記のスクリプトでは、読み込みにムービークリップが持っている loadVariables 命令を使い、onData = function という形式で読み込みの完了を待って ao または aka のムービークリップを表示する処理を作っています。 ここでは詳しく触れませんが。 ActionScript では、変数や関数、ムービークリップ・ボタンなどのインスタンスには全て、持ち主がいるものと考えます。 今回の件ですと、テキストファイルから読み込んだ w01 ~ w03 の変数はムービークリップ g01 のもの、g01 と ao ・ aka のムービークリップはメインのタイムライン(通常は _root という名前のムービークリップ)のものです。 変数や関数を利用したりインスタンスに指示を出す時は、誰が持っているものなのかを正確に指定しなければなりません。 持ち主の指定を”ターゲットパス”といい、様々な書き方があります。 ターゲットパスを誤ると内容を参照できなかったり、インスタンスに指示が伝わらなくなったりします。 ActionScript では大切な考え方ですので、解説書や解説サイトで調べてみてください。 それから、FlashPlayer 6 以降では、loadVariables よりも高機能な” LoadVars ”というクラス( Flash MX ではオブジェクト)を使って読み込むこともできます。 機会がありましたら、こちらでの読み込みも研究してみてください。

maicha18
質問者

お礼

DPEさん本当にどうもありがとうございます。 解りやすくとても丁寧にご説明下さってありがとうございました。 おかげ様で作りたいものも出来上がりました。 これからたくさん勉強してスキルアップしたいと思います。 本当にありがとうございました。

関連するQ&A

  • 脱出ゲームを作るときのアクションスプリクト

    以前、http://oshiete1.goo.ne.jp/qa4121602.htmlで質問した者です 回答で教えて頂き、 ゲットした4つの玉(アイテム)を壁の穴に当てはめる という動作が見事出来ました 同じ色の玉がいくつも表示されるエラーも無い状態です しかし、『壁にはめた玉の順番が、正解なら脱出。。!』というアクションスプリクト on(release){} もしくは, ○○.onRelease = function(){}; もしくは, onClipEvent(mouseUp){} もしくは, ○○.onMouseUp = function() {}. を使って、具体的にどのように書けばよいのか分かりません 何か、解釈を間違ったまま動作が出来ているような気もします ややこしい質問ですいません。 分かる方いらっしゃいましたらお願いいたします(_) 現在、玉のMCを4つずつ(aka1~4、ao1~4、kiiro1~4、midori1~4)、壁の穴MCを4つ作り 「玉レイヤー」と「壁の穴レイヤー」を階層に分け、下記のアクションスプリクトを個々に入れています ・玉のムービークリップ on (release) { _root.aka1._visible=false; _root.item1._alpha = 100; _root.komento = "赤い玉をはずした"; itemNum = false;} ・壁の穴ムービークリップ on (release) { //変数itemで選択されているアイコンを判定 if (_root.item == "about1") { //アイコンの選択枠をはずす _root.item.gotoAndStop("nomal"); //アイコンにアルファをかけて使用済みに _root.item1._alpha = 20; //赤い玉1が表示されているとき、その他の赤玉は非表示にする aka1._visible=true; aka2._visible=false; aka3._visible=false; aka4._visible=false; //コメントの表示 _root.komento = "赤い玉をはめた"; //アイテムの番号をクリア _root.itemNum = false;} else if (_root.item == "about2") { //アイコンの選択枠をはずす _root.item.gotoAndStop("nomal"); //アイコンにアルファをかけて使用済みに _root.item2._alpha = 20; //青い玉1が表示されているとき、その他の青玉は非表示にする ao1._visible=true; ao2._visible=false; ao3._visible=false; ao4._visible=false; //コメントの表示 _root.komento = "青い玉をはめた"; //アイテムの番号をクリア _root.itemNum = false;} else if (_root.item == "about3") { //アイコンの選択枠をはずす _root.item.gotoAndStop("nomal"); //アイコンにアルファをかけて使用済みに _root.item3._alpha = 20; //黄色の玉1が表示されているとき、その他の黄色玉は非表示にする kiiro1._visible=true; kiiro2._visible=false; kiiro3._visible=false; kiiro4._visible=false; //コメントの表示 _root.komento = "黄色の玉をはめた"; //アイテムの番号をクリア _root.itemNum = false;} else if (_root.item == "about4") { //アイコンの選択枠をはずす _root.item.gotoAndStop("nomal"); //アイコンにアルファをかけて使用済みに _root.item4._alpha = 20; //緑の玉1が表示されているとき、その他の緑玉は非表示にする midori1._visible=true; midori2._visible=false; midori3._visible=false; midori4._visible=false; //コメントの表示 _root.komento = "緑の玉をはめた"; //アイテムの番号をクリア _root.itemNum = false;} else {_root.komento = "丸い穴があいている\nなにかはめるのかな?";} }

    • ベストアンサー
    • Flash
  • 文字を一文字づつ表示し、スクロールバーがしたまできたら、文字を表示する。

    質問させて下さい。 //トレーニングボタンを押したとき train.onRelease = function() { mydata_len = _level0.entry.length; i = 0; typeID = setInterval(function () { if (i<mydata_len) { i++; _root.my_txt.scroll++; my_txt.text = _level0.entry.substr(0, i); my_txt.setTextFormat( format ); } else { clearInterval(typeID); } }, 1); //テキストフィールドのscrollプロパティを監視 my_txt.onScroller = function() { if( this.scroll == this.maxscroll ) { _root.training._visible = false; _root.trainingend._visible =true; } else { _root.training._visible = true; _root.trainingend._visible =false; } } } テキストフィールドにタイプライター風に文字を一文字づつ表示させ、表示させている間は、表示中のダイナミックテキストをテキストフィールドの下に表示し、スクロールバーが一番したまできたら、表示終了のテキストに切り替わる、という事をしたいのですが、 文字を一文字づつ表示させている間も表示終了の文字が出てきてしまうのです。 文字を一文字づつ表示している間、スクロールバーが一番下にきたら、表示終了。それ以外は表示中、としたいのです。 文字を一文字づつ表示している間。という制約がなければできるのですが、文字の表示中だとうまくいきません。 もしよろしければ、お教えいただきたく思います。 私がつかっているのは、 WIN XP FLASH MX 2004 です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • actionscript3.0について教えてください。

    actionscript3.0について教えてください。 Flash CS4で、マウスオーバーすると画像が表示するものを制作しました。 (全レイヤー、1フレーム目のみで制作していました) そして最近その以前制作したものの直前に別のムービーを入れることになり、 画像のように1フレーム目から4フレーム目まであけました。 そしてもともとあったフレームをすべて5フレーム目に移動しました。 すると、エラーが出るようになりました。 5フレーム目に移動するとエラーが出るようになってしまったので、 試しに2フレーム目、3フレーム目など試しましたが同じくエラーが出ました。 エラーの内容は TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at test_fla::MainTimeline/frame5() です。 下記のスクリプトを上から二つ目のレイヤーに記述しています。 一番上のレイヤーには、stop();と記述しています。 超初心者のため説明不十分かもしれませんが、宜しくお願いいたします。 /*ボタン1 */ nav1txt_mc.visible = false; nav1_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover); function onMouseover(e:MouseEvent):void{ nav1txt_mc.visible = true; nav1txt_mc.gotoAndPlay("nav1txt_mc"); } nav1_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay); function nondisplay(e:MouseEvent):void{ nav1txt_mc.visible = false; } /*ボタン2*/ nav2txt_mc.visible = false; nav2_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover2); function onMouseover2(e:MouseEvent):void{ nav2txt_mc.visible = true; nav2txt_mc.gotoAndPlay("nav2txt_mc"); } nav2_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay2); function nondisplay2(e:MouseEvent):void{ nav2txt_mc.visible = false; } /*ボタン3*/ nav3txt_mc.visible = false; nav3_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover3); function onMouseover3(e:MouseEvent):void{ nav3txt_mc.visible = true; nav3txt_mc.gotoAndPlay("nav3txt_mc"); } nav3_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay3); function nondisplay3(e:MouseEvent):void{ nav3txt_mc.visible = false; } /*ボタン4*/ nav4txt_mc.visible = false; nav4_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover4); function onMouseover4(e:MouseEvent):void{ nav4txt_mc.visible = true; nav4txt_mc.gotoAndPlay("nav4txt_mc"); } nav4_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay4); function nondisplay4(e:MouseEvent):void{ nav4txt_mc.visible = false; } 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashでjpegファイルを表示させる方法

    Flashのアクションスクリプトを使って外部テキストファイルを読み込む方法を模索していました。 外部テキストの文字を表示する事が出来ました。 ※下記ソース参照 onClipEvent(load){ this.loadVariables("test.txt"); } しかし画像を表示することは出来ませんでした。 どうか画像を表示させる方法を教えて頂けないでしょうか?ちなみにFlashMXを使わないと出来ないという情報は入手しました。

  • 配列で呼び出しMCやボタンにしたい

    いつもお世話になっております。 以前配列の処理の仕方について投稿させて頂きました。 http://okwave.jp/qa3709770.html FLASH8、AS2.0です。 こちらを参考に // 外部データがロードされたときの動作定義 myload.onData = function(moji) { // 外部データを 「,」 でsplit した要素の配列を作成 myArray = moji.split(","); // 配列の要素数を取得 mylen = myArray.length; // 要素数分のテキストフィールドの作成と値の代入 for (i=0; i<mylen; i++) { // テキストフィールドを作成 _root.createTextField("my_txt"+i, i, 20, i*30+20, 100, 22); // (見えるようにテキストフィールドの枠線を入れておきます) _root["my_txt"+i].border = true; // テキストフィールド別に配列の各要素を代入 _root["my_txt"+i].text = myArray[i]; } }; // 外部データのロード myload.load("外部読みこみのパス"); と、おかげさまで ->外部読みこみ ->内容を配列に格納 ->配列を元にテキストフィールドを作成 ここまで実現できたのですが、その次に、 そのテキストフィールド自体をボタンにしたいのですが、 (ボタン自体移動させたいのでMCにしてmouseDown予定です) どの様にしたら良いのでしょうか? 例えば、1個づつMCを作り、 その中にテキストフィールドを1個づつ格納する という、イメージを描いています。 myload.onData = function(moji) { myArray = moji.split(","); mylen = myArray.length; for (i=0; i<mylen; i++) { _root.createEmptyMovieClip("field"+i, i); _root.field+icreateTextField("my_txt"+i, i, 20, i*30+20, 100, 22); _root["my_txt"+i].border = true; _root["my_txt"+i].text = myArray[i]; } }; 例えばこんな感じでルート直下にfield+iのMCを作成し、 そのMCの中にテキストフィールドを格納する(1個づつ) というのを、試みたのですがMC自体が空で読めませんでした。 (テキストフィールドとMCの深度が重複している?) 補足要求等あればお願い致します。

    • ベストアンサー
    • Flash
  • Flash オブジェクトの表示/非表示

    こんにちは。今回はオブジェクトの表示/非表示のことに関して質問させていただきます.使っているものは、Mac/FlashCS3/AS1&2 です. (フレーム名"s1"にて) MC(ムービークリップ)/pre_btn(ボタン)/del_btn(ボタン)/btn(ボタン)というオブジェクトが画面に表示してあります. (アクションフレームに) pre_btn.onRelease = function(){   MC._visible = true; } del_btn.onRelease = function(){   MC._visible = false; } (btnムービークリップアクションに) on(release){   _root.gotoAndPlay("s2") } (フレーム名"s2"にて) btn2(ボタン)のみ画面に表示されています. (btn2ムービークリップアクションに) on(release){   _root.gotoAndPlay("s1") } 以上のACを記述しました.これでMCを表示/非表示させることができ,btnをクリックし"s2"フレームに移動/btn2をクリックし"s1"フレームに移動することもできるようになりました. しかし,"s1"にて非表示にしたMCが,"s2"のフレームに移動し"s1"に戻ってきたとき,表示されている状態に戻ってしまいます. どうしたら,一度非表示にしたMCを,その後フレーム移動したとしても,非表示の状態に保つことができるのでしょうか?? どうか,ヒントだけでもいいので,何か教えていただけると嬉しいです. よろしくお願いします.

  • コントロールの表示・非表示

    C++Builder6を使用しています。 コントロールをあらかじめ配置しておき, ボタンを押すことでコントロールを表示(使用可能) したり,非表示(使用不可)にしたりしたいです。 ボタンは表示用と非表示用の2つを用意しました。 そこで コンポーネント->Visible = True; コンポーネント->Visible = False; のような記述をしました。 が,Trueにはできるのですが,Falseができません。 Show,Hideも試してみたのですが,やはりHideができません。 デフォルトはFalseの状態で見えないようにしています。 一度TrueにするとFalseにはできないのでしょうか。 アドバイスをお願いします。

  • Loadしてある絵を切り替えて表示する

    Excel VABで、同じ表示位置に重ねてLoadしてある複数の画像から 一枚だけを選択して表示しようとしています。次のソースのように 表示する絵だけをVisible = Trueとしていますが、絵の切り替わりが もたもたしていて、スパッと切り替わりません。 もっときれいに切り替えるために何か良い方法はないでしょうか? よろしくお願いします。 Sub dispPicture(pn As Integer) Select Case pn Case 0 ' ClipNameView Image1.Visible = True Image2.Visible = False Image3.Visible = False Image4.Visible = False Image5.Visible = False Case 1 ' ThumbnailView Image1.Visible = False Image2.Visible = True Image3.Visible = False Image4.Visible = False Image5.Visible = False End Select End Sub

  • Flashのactionscriptについて

    FlashMXを使っています。それで、変数名をつけたダイナミックテキストに 文字を外部テキストファイルから呼び出そうとしました。 まずダイナミックテキストをムービークリップにして、 actionscriptをこう記述しました。 onClipEvent(load) { this.loadVariables("test.txt") ; } test.txtは呼び出すファイルの名前です。 で、テキストの方は、textbox=代入する文でやりました。(textboxは ダイナミックテキストの変数名) そしていざ出力してみると、文字化けしてしまいます。なぜでしょうか?

  • Access2003でレポートのラベルを非表示にできない。

    勉強のためにAccess2003で葉書に宛名を印刷するアプリケーションを作成しています。 フォームは「メイン」、レポートは「名簿」というファイル名にしています。 フォームの「メイン」にチェックボックスを作成し、チェックすると差出人氏名を印刷するような仕組みにしたいのですが、デバッグすると下記のようなエラーがでてしまいます。 「レポート名'名簿'の指定が間違っています。または参照しているレポートが閉じているか存在していません。」 「メイン」のコードは ---------------------------------------------------------------- If ((i Mod 2) = 0) Then txt差出人氏名.Enabled = False txt差出人郵便番号.Enabled = False txt差出人住所.Enabled = False txt差出人マンション名.Enabled = False txt葉書氏名.Visible = False '非表示にする txt葉書郵便番号.Visible = False '非表示にする txt葉書住所.Visible = False '非表示にする txt葉書マンション名.Visible = False '非表示にする kekka = 1 Reports![名簿]![_MyName].Visible = False ⇒ここでひっかかります ---------------------------------------------------------------- たしかにレポートが閉じているのですが…どなたかご教授お願いします。

専門家に質問してみよう