Flash8でのダイナミックテキスト読み込みと条件分岐の方法

このQ&Aのポイント
  • Flash8でのダイナミックテキスト読み込みと条件分岐の方法について説明します。
  • ダイナミックテキストを読み込むためには、loadVariables関数を使用します。
  • 読み込まれたダイナミックテキストの内容に応じて、条件分岐を行うことができます。
回答を見る
  • ベストアンサー

内容

内容 ダイナミックテキストに読み込まれているものを判断してアクションを起こすこと。 loadVariables("test.txt");でtestテキストを読み込む。 Flash側のダイナミックテキスト(変数=str1)にはtest.txtに書かれたstr1="1"の1を読み込む。 ダイナミックテキストに読み込まれているものが1(test.txtのstr=1)だったらgotoAndStop(2) ダイナミックテキストに読み込まれているものが2(test.txtのstr=2)だったらgotoAndStop(3) のような感じ。 失敗しているがイメージサンプルがこのような感じ。 ダイナミックテキストの インスタンス名:my_txt myTxt = my_txt.text; if (myTxt == 1) { gotoAndStop(2); //ダイナミックテキストに読み込まれているものが1だったらgotoAndStop(2) } else if (myTxt == 2) { gotoAndStop(3); //ダイナミックテキストに読み込まれているものが2だったらgotoAndStop(3) }else { stop(); } ダイナミックテキストにstr1は読み込めています。 if (myTxt == 1)のようにダイナミックテキストに読みんこんだものをうまく判断したいです。 良い解決方法があれば是非お願いします。 開発環境 Flash8 actionscript1.0&2.0 IE8

  • Flash
  • 回答数8
  • ありがとう数5

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

  • ベストアンサー
  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.8

ん?ExternalInterfaceで返し値の読み込み自体は成功しているってことですか? 「読み込めない」って書いてありましたが、 なんか、ご質問の内容が次々変わっていっているようですが??? どこまで出来てどこから出来ないかを明確にするべきでしたね。 とりあえずloadMovieが使えるなら 取得した画像パスをそのままloadMoive()で読み込めばいいのでは?

jackcell
質問者

お礼

有難うございます。 解決いたしました。

その他の回答 (7)

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.7

画像ですか。 であればテキストフィールドに文字列を入れるだけとは異なり、 画像を読み込んで表示させる仕組みになっているとは思いますが、 その場合は下記に注意してください。 1.画像置き場が違うドメインの場合はクロスドメインポリシーに引っかかります。  これは画像側サーバーにFlash側サーバーのドメインを許可してもらうよう、crossdomain.xmlを設定する必要があります。  それが無理な場合はFlash側でサーバープログラムを実行して代わりに所得してもらう必要があります。 2.相対パスで指定した場合、SWFからのパスではなく、SWFが貼り付けられているHTMLからのパスになります。 画像(外部ファイル)で読み込めない現象ですと、 上記がまず考えられます。

jackcell
質問者

補足

度々すみません。 単純に画像の読み込みでしたら「loadMovie」&ディレクトリは絶対パスの指定で成功はしております。 下記の一面ジェネレータさんのやり方でjsファイルのところまでは推測でできるのですが(こちらのやり方のテキストの読み込みは成功済み)、Flash側でどのように受け取り、画像を読み込んでいるのかの工夫に困っております。 <HTML側貼り付け> <script language="javascript"> var image_url="http://labs.infoalive.com/product/newspaper/dog2.jpg"; </script> 読み込み↓ <jsファイル> function setImageUrlToFlash(){ dateObj = new Date(); var ms = dateObj.getTime(); return image_url; } 読み込み↓ <FLASH> ?

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.6

ひょっとしてFlash側、 import flash.external.ExternalInterface; ↑これ抜けてませんか?

jackcell
質問者

補足

Flash側では下記のようにしています。 ///////////////////////////////// System.useCodepage = true; import flash.external.ExternalInterface; //呼ぶJavaScript機能の名前 var callJasFunction:String = "callJavascript"; // JavaScriptと呼んだ後のリターン値 var returnValue:String = ExternalInterface.call(callJasFunction, msg).toString(); return_txt.text = returnValue; ///////////////////////////////// 参考サイト http://www.adobe.com/jp/devnet/flash/articles/external_interface_05.html 色々と申し訳ありません。 元はといえば新聞ジェネレータというものを真似て作ろうと考えていました。 http://labs.infoalive.com/product/newspaper/ 読み込むFlashは一つでFlash内に反映させたいもの(貼り付けようタグ)をjavascriptで渡すような形です。 そしてどうしても画像をjavascriptから読み込むことができなかったため今回質問させてもらいました方法で挑みました。 その他にも良い方法やアドバイスを頂ければ幸いです。 長文失礼しました。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.5

HTMLでFlashを貼り付けている部分、 allowScriptAccessがsameDomainになってませんか? デフォルトですと、おそらくそうなってます。 このままですと、JSとの連携ができないので、 allowScriptAccess="always" としてください。 embedタグに追加と、param要素の追加両方やってください

jackcell
質問者

補足

回答有難うございます。 Flashの貼り付けは下記のようになっています。 足りないところがありますでしょうか? document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="○○" height="○○" id="○○" align="middle" wmode="transparent">'); document.write('<param name="wmode" value="transparent">'); document.write('<param name="allowScriptAccess" value="always" />'); document.write('<param name="movie" value="○○.swf" /><param name="menu" value="false" /><param name="quality" value="high" /><param name="salign" value="t" /><param name="bgcolor" value="#FFFFFF" /><embed src="○○.swf" menu="false" quality="high" salign="t" bgcolor="#FFFFFF" width="○○" height="○○" name="○○" align="middle" allowScriptAccess="always" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'); document.write('</object>');

  • aspnet
  • ベストアンサー率79% (72/91)
回答No.4

#2の質問者補足から、要件を判断すると、 ・Flashから、外部JavaScriptメソッド呼び出しである、ExternalInterface.call(メソッド名, 送信パラメータ)を使って ・JavaScript側で生成されている値を読み込む ことだと思うのですが、もしそうであれば、ご提示のスクリプト例では、flash側にnullが戻ると思います。 理由は、ExternalInterface.call(云々)が実行されるのが、そもそもJavaScript側の実行タイミングと異なるため、読み出し時にJavaScript側変数が消滅しているからです。 html側でフォームを作り、input type="hidden"な隠しフィールドでも作って、そこに値を保管し、ExternalInterface.callのメソッドで読み出すようにすればOKです。 ExternalInterfaceは、クロスブラウザ動作やflash記述でいろいろ制限があるようで、インターフェース動作そのものが失敗している場合もあります。 (恥さらしながら、自分は一発でできた試しがありません) 外していたらごめんなさい。

jackcell
質問者

お礼

有難うございます。 そういったテクニックを使うのもありですね。 成功するかはわかりませんが・・・

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

> 開発環境 > Flash8 > actionscript1.0&2.0 それでしたら loadVariables("test.txt"); という超時代遅れ(旧世紀)のスクリプトを使う必要がないと思います。 それにこだわる必要があるのでしょうか? 例えば 携帯用の Flash Lite 1.1 対応限定にするなら 今でもそうせざるを得ないかもしれませんが それならそうと書いてくれないと困るわけですし そう書かれていないのであればそのようなものにこだわる必要はないと思います。 結局 loadVariables関数 の何がいけないのかと言うと この関数は 「外部テキストデータをロードしろ!」 とそこまでで終わるんです。 日常生活に喩えると 私が あなたに  「ハワイに行ってキラウエア火山の写真を撮ってこい!」  と言って終わっている それだけと同じことなのです。 「ハワイに行ってキラウエア火山の写真を撮ってこい!」 と言われても瞬時に撮ってくることは不可能ですよね。 不可能なのに,  「ハワイに行ってキラウエア火山の写真を撮ってこい!」  「そして,噴火の様子を今 即答しろ!」 それは無茶ですよ。 そんな命令をする人自体がおかしいです。 もし私があなたにそんなことを命令する上司であれば,私は上司失格です。 Flash MX (これでも 2002年ですよ) 以上であれば LoadVarsクラスのスクリプトが使えます。 これを使うと 「取ってきたよ!」 という報告をくれるイベントハンドラメソッドが用意されているので, 実際にデータを取って来てから,次の命令を下すことができます。 とりあえずテキストフィールドからは 古すぎて混乱を招くだけの「非推奨機能」である「変数名」を取ります。 「インスタンス名」である「my_txt」だけを残します。 そしてそのフレームに次のように書きます。 ------------------------------ //このフレームで再生を停止 stop(); // myVars という LoadVarsクラスのインスタンスを作成 var myVars = new LoadVars(); // myVars にデータがロードされたとき実行するイベントハンドラメソッドを定義 myVars.onLoad = function() { //テキストフィールドmy_txt.に外部データのstr1の値を表示 my_txt.text = myVars.str1; //もし外部テキスト内の変数str1の値が1であれば if (myVars.str1 == "1") { gotoAndStop(2); //もし外部テキスト内の変数str1の値が2であれば } else if (myVars.str1 == "2") { gotoAndStop(3); } }; //myVars に外部データをロード myVars.load("test.txt"); ------------------------------ なお外部テキスト内のデータですが 「str1=1」 とか 「str1=2」 とかのように 改行を含まないデータにしてください。 たとえば 「str1=1 」 こんなのはダメです。 上のようなデータだと 変数 「str1」 の値は 「1改行コード」 となり 「1」 とは等価でなくなります。

jackcell
質問者

お礼

度々BlurFiltanさんの回答を 拝見しますが、毎回わかりやすい説明です。 有難うございます。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.2

myTxt = str1 ってって書いてみればよいかと。

jackcell
質問者

補足

大変申し訳ございませんが補足です。 BumeshiOKさんのようにmyTxt = str1で代入はできたのですが・・・ (txtファイルから読み込む場合は・・・) 補足の追加として、htmlに貼り付けたjavascript⇒jsファイル⇒Flashのような流れで下記のような形になります。 <貼り付けているHTML> <script src="yomikomi.js" language="javascript"></script> <script language="javascript">var yomikomi1="1";setNsFlash(); </script> 読み込み↓ <yomikomi.js> function callJavascript(str) { return yomikomi1; } 読み込み↓ <Flash> var callJasFunction:String = "callJavascript"; var returnValue:String = ExternalInterface.call(callJasFunction, msg).toString(); my_txt.text = returnValue; このような場合でダイナミックテキストに読み込まれた場合に代入ができません。 txtファイルから読み込む場合のと違いは「変数」で読むのではなく「インスタンス名」でダイナミックテキストに読み込んでいることです。 相当わかりいにくいとは思いますが宜しくお願いいたします。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.1

ダイナミックテキストに、インスタンス名(my_txt)と変数(str1)の 両方が割り当てられているということですね。 この場合、 my_txt.txt == str1はfalseになります。 if (str1 == 1) { といった感じの評価式でよいのでは?

jackcell
質問者

補足

my_txt.textのstr1はmyTxtに代入できますでしょうか?

関連するQ&A

  • Flashの外部テキスト読み込みについて

    FlashのActionScriptに外部テキストから変数をに数値を格納したいのですが以下のようにしても出来ません。 教えてください。 System.useCodepage = true; loadVariables ("maisu.txt",_root); a = maisu; gotoAndStop(a); ________________maisu.txt____________________ maisu=5 Flash8を使っています。よろしくお願いします。

  • loadMovieとonEnterFrameについて

    はじめまして FLASH8を使用しています。 ActionScript初心者です。よろしくお願いします。 単体のswfだと機能するのですが、loadMovie後機能しなくなってしまいます。 読み込ませる側のアクションは ▽ボタンシンボルに on (press) { _root.moveMenu_1 = -138; menu_name.text = "キッズメニュー"; menu_text.text = kidsData; } ▽フレームアクション loadVariables("kidsmenu.txt", this); loadVariables("menmenu.txt", this); loadVariables("ladymenu.txt", this); loadVariables("seniormenu.txt", this); moveMenu_1 = -296; this.onEnterFrame = function() { img_y._x += ((0-moveMenu_1)-img_y._x)*0.1; }; MCのインスタンス名は「img_y」です。 他にボタンが3つほどあります。 swf単体だと機能します。 loadMovie後text・外部テキストは読み込むのですが、スクロールしなくなってしまいます。 これを3_1.swfとしました。 読み込む側のアクションは ▽ボタンシンボルに on (press) { _root.moveMenu = 2100; } 他に4つほどボタンがあります。 ▽フレームアクション scroll_flag = 0; moveMenu = 0; this.onEnterFrame = function() { if (scroll_flag == -1) { if (back_img._x<0) { moveMenu -= 20; } else { moveMenu = 0; } } if (scroll_flag == 1) { if (back_img._width+back_img._x>700) { moveMenu += 20; } else { moveMenu = 2800; } } back_img._x += ((0-moveMenu)-back_img._x)*0.1; }; back_img.c_1.loadTarget.loadMovie("1_1.swf"); back_img.c_2.loadTarget.loadMovie("2.swf"); back_img.c_3.loadTarget.loadMovie("3_1.swf"); back_img.c_4.loadTarget.loadMovie("4.swf"); back_img.c_5.loadTarget.loadMovie("5.swf"); スクロールするMCを「back_img」としました。 他に読み込んだものは機能したんですが 3_1だけうまく機能しません。 長々と失礼しました。

    • ベストアンサー
    • Flash
  • 以下のActionScriptをスッキリさせたいのですが、良い方法はな

    以下のActionScriptをスッキリさせたいのですが、良い方法はないでしょうか? (flash MXを使用しています。) if (aaa1 == 1) { mc1.gotoAndStop(2); } if (aaa1 == 2) { mc1.gotoAndStop(3); } if (aaa1 == 3) { mc1.gotoAndStop(4); } if (aaa1 == 4) { mc1.gotoAndStop(5); } ・ ・ ・ if (aaa2 == 1) { mc2.gotoAndStop(2); } if (aaa2 == 2) { mc2.gotoAndStop(3); } if (aaa2 == 3) { mc2.gotoAndStop(4); } if (aaa2 == 4) { mc2.gotoAndStop(5); } ・ ・ ・ if (aaa3 == 1) { mc3.gotoAndStop(2); } if (aaa3 == 2) { mc3.gotoAndStop(3); } if (aaa3 == 3) { mc3.gotoAndStop(4); } if (aaa3 == 4) { mc3.gotoAndStop(5); } ・ ・ ・ 初心者で、このActionScriptの効率的な書き方がわかりません(^-^;) functionを使えばいいのでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • 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のactionscriptについて

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

  • HTMLレンダリングについて

    お世話になります。FLASH8の質問です。 外部テキストをloadVariablesでムービークリップの中にロードする際に、「HTMLレンダリング」をonにして<font color="#cc0000">したいのですがうまくいきません。 ムービークリップは二つ(インスタンス名:「title_mc」「honbun_mc」)あり、それぞれがダイナミックテキストボックスを持ち、インスタンス名を「title_txt」「honbun_txt」としています。 テキストファイルは"text.txt"で、 内容は title=・・・ &honbun=・・・<font color="#cc0000">・・・</font>・・・ シーン1の1フレーム目に this.loadVariables("text.txt"); this.onData = function() { this.title_mc.title_txt.text = title; this.honbun_mc.honbun_txt.text = honbun; }; プロパティパネルの変数ボックスには何も記入していません。 この方法で出来ると思うのですが・・・うまくいきません。 HTMLレンダリングはムービークリップ内では効かないのでしょうか?それとも何かコツがありますか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • javascriptで困っています。教えてください

    以下のようにjavascriptの内容を書いた外部のテキストファイルを読み込んで、実行しようとしているのですが、うまくいきません。普通にjavascriptを読み込むのは分かっているのですが、このような方法ができないのでしょうか?よろしくお願いします。 <!doctype html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <div id="jsbox"></div> <script type="text/javascript"> var jsbox = document.getElementById("jsbox"); //非同期通信///////////////////////////////////////////// var xmlHttp; loadText(); function loadText(){ if (window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); }else{ if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else{ xmlHttp = null; } } xmlHttp.onreadystatechange = checkStatus; xmlHttp.open("GET", "http://xxxxxxxxxxxx/js_test.txt", true); xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ var str = xmlHttp.responseText;alert(str); jsbox.innerHTML = str; test_js(); } } ///////////////////////////////////////////////////////////////// </script> </body> </html> テキストファイルをhttp://xxxxxxxxxxxx/js_test.txtに置き、テキストファイルの内容が <script type="text/javascript"> function test_js(){ alert("test"); } </script>

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • FlashVarsのリンク読み込みについて

    お世話になります。 変数を利用して個別にflashvarsを設定したいと考えています。 --html▼-- <param name="FlashVars" value="変数1" /><param name="FlashVars" value="myURL=変数2"> --html▲-- --actionscript(シンボル1-ボタン)▼-- on (release) { getURL("", "_self", "GET"); } --actionscript▲-- --actionscript(シンボル2-ムービークリップ)▼-- this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; if (_level0.myURL == undefined) { myTxt.text = "myURL is not defined"; } else { myTxt.text = _level0.myURL; } --actionscript▲-- myURL=変数2は取得できますし、きちんと表示も行われますが、 変数1のほうは取得はできますがクリックしてリンク先に飛べません。 シンボル1のボタンの内容を、シンボル2に書いてみましたが、どうしてもうまくいきません。 swfファイルから直接クリックするとリンク先に飛ぶ事は可能でした。(もちろん変数は取得できません) htmlからはクリックしても無反応です。 どうぞ解決策をご教授ください。 よろしくお願い致します。

  • エクセルVBA テキストボックス 金額の入力

    エクセルVBA ユーザフォームにて「商品登録」を作成しています。 単価を設定するテキストボックスについて2つ質問させてください。 1.単価が小数点以下の場合の処理 2.小数点なしの単価を小数点ありの単価に修正する方法 1.以下の方法で小数点ありとなしを判断しているのですが、 もっと簡単な方法があれば教えていただきたいです。 Set mytxt = Me.Controls("txt4") If mytxt.Text <> "" Then   tanka01 = mytxt.Text   tanka02 = Application.WorksheetFunction.RoundDown(tanka01, 0)   If tanka01 = tanka02 Then     mytxt.Text = Format(tanka01, "#,##0")   Else     mytxt.Text = Format(tanka01, "#,##0.0")   End If End If 2.上記方法で、単価をデータに設定後、変更を行うため、 TextBox内に単価を出力し変更できるようにしているのですが、 1度小数点なしで設定してしまうと、小数点以下が単価のTextBox内に 入力できなくなってしまいます。 小数点が再度入力できる方法は存在するでしょうか? 以上です。 色々と調べてみたのですが、見つからず、質問させていただきました。 よろしくお願いいたします。