こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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データがなくても外部データだけで編集と反映させるにはどのようにしたらよいか、ご教授お願いいたします。
宜しくお願いします。

投稿日時 - 2008-09-09 19:41:26

QNo.4316423

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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 によってやり方は変わりますので,
その辺までは回答できません。

投稿日時 - 2008-09-10 18:46:52

お礼

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

投稿日時 - 2008-09-12 11:58:05

あなたにオススメの質問