• 締切済み

MCのアクションの値を外部データで編集する方法

環境はwindowsVista FlashCS3 ASバージョンはサンプルが1.0なので1.0のままです。 憲ちゃんFlash hfmサイトさんの「Flash5による外部JPEGを使った自動スライドショー」 http://hfm-kenchan.com/Lesson/log_qa/D0708311.htm を参考にしています。 目的は、このサンプルが読み込みjpgの最大数をFlaデータ内で編集を行う形なので、 それを外部で値を変えられるようにしたいです。 同ディレクトリに「photo」フォルダを作りその中にp1.jpg、p2.jpg~と、連番でjpgデータが入っています。 メインタイムラインのレイヤー1のフレーム1に画像と同じ大きさのMC「MC_photo」(リンゲージ:pic) さらにその中にシェイプでできた同じ大きさのMC「base」(インスタンス名:loadMC)があります。 MC「base」にはおそらくフェードのアクションがついています。 「MC_photo」には下記のアクションがついています。 //////////////////////////////////////////////////////////////////// onClipEvent (load) { Max = 6; Sec = 6; Path = "photo/"; n = depth=cnt=0; function loadPic() { n++; if (n>Max) { n = 1; } depth++; mcName = "mc"+depth; this.attachMovie("pic", mcName, depth); this[mcName].loadMC.Loaded = false; this[mcName].loadMC.loadMovie(Path+"p"+n+".jpg"); if (depth>2) { this["mc"+(depth-2)].removeMovieClip(); } } loadPic(); } onClipEvent (enterFrame) { cnt++; if (cnt>Sec*12) { cnt = 0; loadPic(); } } //////////////////////////////////////////////////////////////////// ↑このアクションの2行目の Max = 6 ; を外部ファイルで編集できるようにしたいと思い、 同ディレクトリに date.as をつくり、as内は Max = 2;  と記入し、 //////////////////////////////////////////////////////////////////// onClipEvent (load) { #include "date.as" Sec = 6; (同上なので略) //////////////////////////////////////////////////////////////////// このように書き換えパブリッシュしたら成功しました。 photoフォルダにはp6.jpgまで入っていますが、p1とp2がループしました。 しかし・・・、経験者の方はすでに気がついておられるでしょうが、 .asファイルってパブリッシュ後は変更しても反映されないのですね…。知らなかったです。 XMLのように後で書き換えができるのだと考えていました・・・。 そこで、XMLやtxtで扱える方法を探していると、 .txtを用いて値を変更する場合はLoadVarsクラスを仕様する例が沢山あるのを見つけ、 教えて!にある「LoadVars」がつくログで症状が近そうなのアクションは試してみたのですがどうにもうまくいきません。 シンタックスチェックをしてエラーが出ない時でも、パブリッシュswfを再生すると、 指定したい数を無視してすべての画像が表示し終わった後に黒い画面が出てきます。(MCが黒です) おそらく、Maxの効果がなくなったようになり繰り返さなくなったのだと思います。 LoadVarsクラスはステージ上のテキストにだけ反映されて、アクション内の値を変えることはできないのでしょうか? どなたかこの原因とこの書き方がおわかりの方はいますでしょうか? LoadVarsクラスに限定はしていません、XMLでもかまわないです。 Flaデータがなくても外部データだけで編集と反映させるにはどのようにしたらよいか、ご教授お願いいたします。 宜しくお願いします。

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

みんなの回答

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

◎LoadVarsの方法 ・ファイル構造  任意のフォルダ     ├ ○○.html     ├ ○○.swf     ├ gaibu.txt     └ photo(フォルダ)        ├p1.jpg        ├p2.jpg         … 略 … ・「gaibu.txt」 の内容 (改行無しの1行) ------------ Max=6 ------------ ・ムービーの構造 スクリプト自体に手を入れると, スクリプト全体や構造の作り直しになりかねないので, フレーム1 から出没するムービークリップなどを, 全て フレーム2 以降にずらして, 空白キーフレームだけになったフレーム1に次のように書くのが簡単ではないかと思います。 ----------------------------------------- // フレーム1 でストップ stop(); // LoadVarsクラスのインスタンス myLV を作成 myLV = new LoadVars(); // myLV に外部データをロードしたときの動作定義 myLV.onLoad = function() { // _root をフレーム2に進めて停止 _root.gotoAndStop(2); }; // 外部データ gaibu.txt をロード myLV.load("gaibu.txt"); ----------------------------------------- そして, ムービークリップのスクリプトの Max = 6; の部分だけを次のように書き替えます。 ------------------------ onClipEvent (load) { Max = 6; Sec = 6; … 略 … ------------------------  ↓書き替え↓ ------------------------ onClipEvent (load) { Max = Number(_root.myLV.Max); Sec = 6; … 略 … ------------------------ ◎FlashVarsの方法 ・ファイル構造  任意のフォルダ     ├ ○○.html     ├ ○○.swf     └ photo(フォルダ)        ├p1.jpg        ├p2.jpg         … 略 … ・ムービーの構造 これは現在のままのムービーの状態でできます。 つまり全てをフレーム2以降にずらす必要はありません。 ムービークリップのスクリプトの Max = 6; の部分だけを次のように書き替えます。 ------------------------ onClipEvent (load) { Max = 6; Sec = 6; … 略 … ------------------------  ↓書き替え↓ ------------------------ onClipEvent (load) { Max = Number(_root.Max); Sec = 6; … 略 … ------------------------ そして,「○○.html」 と 「○○.swf」 をパブリッシュして, 「○○.html」 の <object>~</object> 間に次の <param> を書き加えます。 <param name="FlashVars" value="Max=6"> <embed> も使用されていましたら, そちらも次のように FlashVars="Max=6" を書き加えます。 <embed src="○○.swf" quality="high" …   ↓付け加え↓ <embed src="○○.swf" FlashVars="Max=6" quality="high" … なお, SWF を JavaScriptファイル(.js) で貼り付けている場合は, この FlashVarsの方法 は使いにくいと思います。 また 使用されている JavaScript によってやり方は変わりますので, その辺までは回答できません。

miyamin
質問者

お礼

ご回答と説明ありがとうございます! 上記のとおりで動きました! htmlにあげる時に書き換えを気をつけなければいけないですね。 ありがとうございました!!

関連するQ&A

  • FLASHのAS2で作成をしました。外部jpg画像読み込みの部分が現状

    FLASHのAS2で作成をしました。外部jpg画像読み込みの部分が現状は写真8枚です。 状況により4枚になったりするのですが、どこをどのようにしたらいいのか分からないので、助けてください。 MAX=8を外部txtにできるのでしょうか?また、MAX=8をいろいろな数に対応出来るプログラムがありますか? よろしくです。 onClipEvent (load) { Max = 8; Sec = 3; Path = "photo/"; n = depth=cnt=0; function loadPic() { n++; if (n>Max) { n = 1; } depth++; mcName = "mc"+depth; this.attachMovie("pic", mcName, depth); this[mcName].loadMC.Loaded = false; this[mcName].loadMC.loadMovie(Path+"p"+n+".jpg"); if (depth>2) { this["mc"+(depth-2)].removeMovieClip(); } } loadPic(); } onClipEvent (enterFrame) { cnt++; if (cnt>Sec*4) { cnt = 0; loadPic(); } }

  • 外部SWFファイルの中のMCのgotoAndPlayによるタイムライン制御にすて

    Flash8&WinXPでの環境でオーサリングしております。 質問なのですが、 _root.mc1_1_mc.mc1_2_mcに外部SWFファイル v2.swfをloadMovieします。 _root.mc1_1_mcのフレームアクションに function gotoF(){ パス+gotoAndPlay("goto_nextF1"); } _global.goto_cnt=0; _root.mc2_1_mcのフレームアクションに if(_global.goto_cnt=='1'){ this._parent.gotoF(); } v2.swfの中のMC,v2_mc1_mc.v2_mc2_mcのフレームアクションに if(_global.goto_cnt==0){ this.gotoAndPlay("goto_nextF2"); } _global.goto_cnt2=1; とします。 上記どちらとも、何かトリガーを作っても 外部swf v2.swfのフレームラベル"goto_nextF1",フレームラベル"goto_nextF2"に フレームを移動させることができません。 _global.goto_cntも参照されていないようです。 function gotoF(){ パス+gotoAndPlay("goto_nextF1"); } のパスかスクリプトが間違っているのでしょうか? また、 if(_global.goto_cnt==0){ this.gotoAndPlay("goto_nextF2"); } では、traceしてデバッグしても _global.goto_cntを参照していません。 この逆、v2_mc1_mc.v2_mc2_mcのフレームアクション の_global.goto_cnt2=1; を_root.mc1_1_mc.mc1_2_mcのフレームアクションで if(_global.goto_cnt2==1){ trace("ok"); } としてトリガーを作り確認しても、 これもまた参照されません。 大変無知でいささか恐縮ですが、 どなたかご教授頂けませんでしょうか。 どうぞ宜しくお願い致します。

  • actionscript1.0でJPGを読み込んでるところをSWFに、

    actionscript1.0でJPGを読み込んでるところをSWFに、、、 初心者のため良く分からないため質問いたします。 FLAを開くと設定はFlashのactionscript1.0 パブリッシュ設定がFlash Player8.0でした。 現在上記設定で下記scriptが書かれているものをFlashCS4で開いています。 そして現在3つのJPGを読み込んでいるのですが、そこをSWFに変更したいと考えています。 現在はAS1.0ですが、これを機会にAS3.0に変えたいとも考えています。 どう調べていいか分からないので質問させていただきました。 質問自体よく分からないかもしれませんが、非常に困っています。 よろしくお願いいたします。 onClipEvent (load) { Pass = "img_top_flash/"; Timer = _root.Sec*30; cnt = 0; this._y = 300; //元はthis._y = -20; this.loadVariables( Pass + "top_flash_url.txt"); function loadJPG() { _root.Loaded = false; cnt = 0; if (num == Max) { num = 0; } else if (num<0) { num = Max-1; } depth++; if (depth>1) { _root.mc["m"+(depth-2)].removeMovieClip(); } navi.slider._alpha = 100; mcName = "m"+depth; _root.mc.attachMovie("pic",mcName,depth); _root.mc[mcName].fileName = Pass+picArray[num]+".jpg"; for (i = 0; i < Max; i++) { if (i == num) { navi.mc["b"+i].gotoAndStop(2); } else { navi.mc["b"+i].gotoAndStop(1); } } } } onClipEvent (data) { picArray = files.split(","); Max = picArray.length; for (i = 0; i < Max; i++) { mcName = "b"+i; navi.mc.attachMovie("navi_btn",mcName,i); navi.mc[mcName].num = i; navi.mc[mcName]._x = i*20; } navi.mc.attachMovie("sankaku","sankaku",Max); navi.mc.sankaku._x = Max*20; num = depth = 0; loadJPG(); } onClipEvent (enterFrame) { if (Max>1 && _root.Loaded) { //this._y -= this._y/4; this._y -= this._y/100; if ( this._y <= 280 ) { this._y = 280; } navi.slider._x += (num*20-navi.slider._x)/_root.spd; navi.slider._alpha += (50-navi.slider._alpha)/_root.spd; cnt++; if (cnt>Timer) { num++; loadJPG(); } } }

    • ベストアンサー
    • Flash
  • 外部画像をMCの真ん中に表示する。

    htmlから変数をもらって外部テキストと画像を表示させています。 自分でもいろいろ探したのですが、 ステージの真ん中にもっていくことや、画像のサイズを合わせることは出来たのですが jpgを読み込むmcの真ん中に表示することに関しては探しきれませんでした。 抜きの画像でバックは透明、高さは合わせられるのですが幅は無理なのです。 どなたかご存知の方教えて頂けないでしょうか? おそらく、onClipEvent (load)で指定するのだろうと考えてはいるのですが・・・。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • 外部ファイルを読み込んだMCをドラッグ&ドロップしたいんですが?

    flash(swf)で外部ファイルを読み込んだムービークリップ(MC)をドラッグ&ドロップで移動できるようにしたいんですが、どのようにすればできるでしょうか? 通常のライブラリなどに登録して表示させているMC(インスタンス名:photoL)は以下のようなASで処理できるんですが、外部ファイルを読み込んだMC(インスタンス名:photoF)では同じ書き方をしても表示はするんですが、ドラッグ&ドロップで移動できません。 --------------------------------------------------- photoF.loadMovie("test.jpg"); photoL.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoL.onRelease = function(){ this.stopDrag(); }; photoL.onReleaseOutside = function(){ this.stopDrag(); }; photoF.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoF.onRelease = function(){ this.stopDrag(); }; photoF.onReleaseOutside = function(){ this.stopDrag(); };

    • ベストアンサー
    • Flash
  • 外部テキストからURLを読み込む方法

    昨日、外部テキストの読み込みでお世話になったものです。 言われたとおりにやってみたところちゃんとテキストは読み込めました。 次はURLを読みこもうと思い、みなさんの質問の参考になりそうなものを手がかりにやってみたのですが、うまくいきませんでした。 テキストファイルは『flash.txt』 シンボルはMCで フレーム1のアクションスクリプトは ―――――――――――――――――― System.useCodepage = true; myLoadVars = new LoadVars(); myLoadVars.onLoad = function(Success) { if (Success) { _root.text1.text = this.menu1; _root.url1 =this.url1; } }; myLoadVars.load("flash.txt"); --------------------------------------- となっています。 これでシンボルMCに on (release) { getURL("_root.url1"); } とやっているのですが、飛びません。 また前回と同じようにこちらのミスが多いのかもしれませんが、 知っている方がいましたらよろしくお願いいたしますm(__)m

    • ベストアンサー
    • Flash
  • つかんで放す

    ムービークリップ(MC)に下記のアクションスクリプトASを記述しました。 右へMCが動いて行き、マウスでクリックすると掴み動かせるようになり、放すとまた動き出すというものになるはずなのですが、上手く行かずクリックするとポインタにくっついた状態になってしまいます。 ASの書き方に問題があるのでしょうか? ご教授いただきたくおもいます。 よろしくお願いします。 onClipEvent (load) {    this._x = 20;    this._y = 200;    Hspeedx = 1; //MCの速度    Hcatch = 0; //MCキャッチの時は1、そうでない時は0に } on (press) {    Hcatch = 1; //MCキャッチ    startDrag(this); } on (release) {    Hcatch = 0; //MCを放す    sotpDrag(); } onClipEvent (enterFrame) {    if (Hcatch == 1) {       Hspeedx = 0;    }    if (Hcatc == 0) {       Hspeedx = 1;    }    this._x = this._x+Hspeedx; }

    • ベストアンサー
    • Flash
  • アクションスクリプト 外部JPGを読み込み

    下記のアクションスクリプトで外部JPGを読み込ませているのですが、IEだと1枚目のJPGが読み込まれません。 どなたか原因を教えてください! よろしくお願いします。 mcl.addListener(listener); for (var i:Number = 1; i<=Max; i++) { mcl.loadClip("img1/"+i+".jpg",_root["mc"+i } var bmcl:MovieClipLoader = new MovieClipLoader(); for (var i:Number = 1; i<=Max; i++) { /* bmcl.loadClip("img2/"+i+".jpg",_root["btn.thumb"+i]);*/ var btn:MovieClip = _root.attachMovie("btn_mc", "btn"+i, Max+i btn.id = i; bmcl.loadClip("img2/"+i+".jpg",btn.thumb

  • 外部XMLを使ってFLASHに値を送りたい

    下記のアクションスクリプトは外部XMLより色の値をFLASHに送るものです。 タイトル、コメント、フォントサイズや種類の指定を追加するにはどうすればよいのでしょうか? 宜しくお願いします。 System.useCodepage = true; my_xml = new XML(); my_xml.load("style.xml"); my_xml.ignoreWhite = true; my_xml.onLoad = function(success) { if (success == true) { rootNode = my_xml.firstChild; AValue = rootNode.firstChild.nodeValue; AValue = AValue.substr(1, 6); updatebgcolor(AValue); colorNode = rootNode.nextSibling; $BValue = colorNode.firstChild.nodeValue; $BValue = $BValue.substr(1, 6); updatebgcolor2($BValue); } }; updatebgcolor = function (AValue) { colorObj = new Color(bg_mc); colorObj.setRGB("0x"+AValue); }; updatebgcolor2 = function ($BValue) { colorBObj = new Color(bg2_mc); colorBObj.setRGB("0x"+$BValue); };

  • 外部の画像をボタンとして使用

    オンマウスで画像が変わるボタンを作成したいのですが、 使用する画像を外部ファイルにしたところうまく動作しません。 ボタン用のMCを設置し、MCアクションに以下のように記述しましたが 画像は表示されませんでした。 onClipEvent (load) {  filename = "images/button.gif";  loadMovie(filename,this); } どこをどう直せば画像を読み込めるようになりますか? ※FLASH CS3 / AS2.0です ※画像のパスは正しい事を確認しています。

    • ベストアンサー
    • Flash

専門家に質問してみよう