プロが教える店舗&オフィスのセキュリティ対策術

(gooメールを見る前にまたURLを記述してしまいました。これより前の質問は削除ください)

シーン1、シーン2の構成になっています。
シーン1(home)
白枠:外部swfを読み込むmc(インスタンス名:"stage")
アイコン:シーン2への移動ボタン
on (release) {
gotoAndPlay("info",1);
}

シーン2(info)
黒枠:外部swfを読み込むmc(中は透明。インスタンス名:"stage2")
四角緑(4つ):2列2行に配置。左上以外は外部swfにリンクしたmc
ボタン:外部swfにリンクしたボタン
information:外部swfを閉じるmc
home:シーン1への移動ボタン
on (release) {
gotoAndPlay("home",1);
}

シーン2からシーン1へ移動すると、四角緑だけが残って表示されてしまいます。
更に、シーン2へ移動すると、四角緑が重複して表示されてしまいます。シーン2にあるボタンは表示されません。四角緑のmcの設定がおかしいのでしょうか?
シーン1へ移動しても四角緑が表示されない方法を教えて下さい。
よろしくお願いいたします。

A 回答 (1件)

前回ご質問のときに書いたURL


http://hakuhin.hp.infoseek.co.jp/main/as/z.html# …
と,
前回も書いた
MovieClip..removeMovieClip();
で解決すると思いますよ。


ムービークリップの深度を変更すると,
ムービークリップはレイヤーというものに依存しなくなるので,
シーンをまたいでも存在してしまいます。
だから,四角緑が重複するという一見怪現象が起こるのだと思います。


簡単なことから積み上げないと全然先に進めなくなりますから実験です。

新規ドキュメント作成して,
そのドキュメントを任意の名前で任意の場所に保存してください。

そして,まずタイムラインを 2レイヤー 60フレームにしてください。
そして,下のレイヤーのフレーム30を選択してキーフレームにし,
その30フレーム目に四角を描いてください。
大きさは適当で良いです。横×縦=4cm×2cm くらいで良いでしょう。
場所はステージの中央より少し左に描いてください。
するとタイムラインは次のようになると思います。

                       30           60
 □ レイヤー 筆・・|○                     []|
 □ レイヤー 筆・・|○        []|●//////////////[]|

そして,今描いた四角をムービークリップに変換して,
インスタンス名を仮に 「AAA」 としてください。

その「AAA」に次のようなスクリプトを書いてください。

----------------------------
onClipEvent (load) {
this.swapDepths(5);
}
onClipEvent (enterFrame) {
this._x += 4;
}
----------------------------

「このムービークリップの深度を 5 にして,
1フレーム進む時間ごとにこのムービークリップを,
右に 4ピクセル ずつ動かす」

というスクリプトですよね。
それでパブリッシュしてみてください。
フレームには何もスクリプトを書いていない状態なので,
勝手に,60フレームまで行くと,また1フレームに戻ってループすると思います。

ムービークリップは2つになってしまうと思います。
ムービークリップは1つしか作っていないはずですし
スクリプトで「コピーしろ」という文章を書いたわけでもありません。
でも,2つになってしまいます。

60フレームから1フレームに戻るとき,
消えるのは,下レイヤーの「AAA」です。
しかし,
swapDepths ですでにレイヤー2には存在しないので,
1フレームに戻っても消えないわけです。


上レイヤーの最終フレームである60フレームを選択してキーフレームにしてください。
そして,そのフレームに次のように書いてください。

--------------------------
_root.AAA.removeMovieClip();
--------------------------

そして再びパブリッシュしてみてください。
ムービークリップは2つになりません。


これを作っていらっしゃる物にも適用すれば良いのです。

「HOME」に戻るボタンに

-------------------------
for (i=1; i<=4; i++) {
_root["m_"+i].removeMovieClip();
}
-------------------------

を追加すると,
m_1 ~ m_4 は消えると思います。
実際の FLA ファイルを見たわけでも,実験したわけでもないので,
全て推測ですが,おそらく四角緑が重複して表示されることはなくなると思います。


========================

ちなみに,
上で作った例は

_root.AAA._visible = false;

ではちゃんと消えません。
一度60フレームまで行ったとき,
一応「AAA」 の _visible は false になって非表示になりますが,
再び30フレームに達したとき,
下レイヤーに出没する「AAA」の _visible は true ですから,
それによって,
同じインスタンス名を持つ深度5の「AAA」の _visible も true になってしまうためです。

========================

さらにちなみに,
今思い出したのでついでに。
前々回のときに書かれていた

 eval("_root.m_"+i).gotoAndStop(2);

ですが,これは,

 _root["m_"+i].gotoAndStop(2);

と同じ意味です。
質問者様が書かれているスクリプトの場合,左辺ではないので,どちらでも良いのですが,
eval関数は左辺で使えなくなりました。
「左辺にある Eval() が正常動作しない」
http://www.macromedia.com/jp/support/flash/ts/do …

また,ActionScript3.0 では Removed です。
「ActionScript 2.0 to ActionScript 3.0 Migration」
http://livedocs.macromedia.com/labs/1/flex/langr …

だんだん eval は肩身の狭い存在になってきています。
使用には気を付けてください。
思わぬところで,また変なことになる可能性があります。

========================

さらにさらにちなみに,

削除されたものをちらっとだけ昨日拝見させていただきました。
それを見て正直かなりビジュアル的には良いセンスはしていると思いました。
けっこう感動です。
(昨日は回答する時間がなかったので回答はできませんでしたけど。)

しかし,スクリプトや動作面は…
まあ,いきなり,慣れない難しいスクリプトをコピペで使われるより,
簡単なことから自分でスクリプトを書いては実験して,
コツコツと知識と感を積み上げる方が良いと思いますよ。
結果的にできるのも早いかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!