アプリ版:「スタンプのみでお礼する」機能のリリースについて

FLASH 5 を使っています。

現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。
複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。
別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。
hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。
複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに

onClipEvent (enterFrame) {
if (this.hitTest( _root.gomi )) {
this.removeMovieClip ();
}
}

と書いてみたのですがダメでした。
なにぶん Actionscriptを始めたばかりで、良く分かりません。
お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。

A 回答 (1件)

書かれているスクリプトのままで,ちゃんと消えますよ。


作成&検証は Flash 5 です。

よくわかりませんが,
書かれているスクリプトがアヤシイのではなくて,
duplicateMovieClip の方が悪いのではないでしょうか。

一番アヤシイのは深度です。
removeMovieClip で消せるのは,深度0 以上のムービークリップです。
深度-1以下の深度を割りあてると,removeMovieClip では消せません。


===私が作った物======

Flash を起動して,
ステージの真ん中(中央)辺りに,
50px×50pxくらいの塗りの四角を描いて,
ムービークリップに変換し,
インスタンス名に「gomi」と付ける。

次にステージの真ん中の下の方に,
直径40pxくらいの塗りの丸を書いてボタンシンボルに変換する。

そのボタンに,次のように書く。
-----------------------
on (press) {
this.startDrag();
}
on (release, releaseOutside) {
this.stopDrag();
}
-----------------------

そのボタンをさらにムービークリップシンボルに変換し,
インスタンス名に「myMC」と付ける。

その「myMC」に,次のように書く。
-----------------------
onClipEvent (enterFrame) {
if (this.hitTest(_root.gomi)) {
this.removeMovieClip();
}
}
-----------------------

新規レイヤーを挿入して,
そのレイヤーのフレームに次のように書く。
-----------------------
// i= 0~9 までループ
for (i=0; i<10; i++) {
// myMC を newMC? という名で 深度 i に複製
_root.myMC.duplicateMovieClip("newMC"+i, i);
// 複製した物の整列
_root["newMC"+i]._x = 20+45*i;
_root["newMC"+i]._y = 100;
}
-----------------------

→「制御」→「ムービープレビュー」(もしくはパブリッシュ)

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

以上のように作成して,
ステージの上の方に複製された横一列のムービークリップをドラッグして,
ゴミ箱の「gomi」にドラッグすると消えます。

ただし,
ステージ下に最初に作ったムービークリップはドラッグしても消えません。
理由は,深度が-1以下だからです。


/////////////////////////////////////////////


上は,
ご質問のスクリプトをなるべくそのまま残した,
単なる実験サンプル例です。

本当は,
ムービークリップに onClipEvent (enterFrame) を書くと,
CPUの無駄づかいになるので,
ムービークリップには何も書かず,
ムービークリップ内のボタンの方に,

-----------------------
on (press) {
this.startDrag();
}
on (release, releaseOutside) {
this.stopDrag();
if (this.hitTest(_root.gomi)) {
this.removeMovieClip();
}
}
-----------------------

と書いた方が良いです。

また,
実験のために,最初に描いた「myMC」には何も工夫をしていませんが,

_rootのフレームのスクリプトに次のように1行を付けたすと,
最初に描いた「myMC」も消すことができます。

-----------------------
// myMC を深度 1000 に深度変更
_root.myMC.swapDepths(1000);
-----------------------


とにかく上のようなものを作成すると,ちゃんと消えませんか?

まず,深度をうたがってみてください。

 duplicateMovieClip("MC名", 深度);

「深度は 0 以上になるように」です。
    • good
    • 0
この回答へのお礼

遅くなりましてスミマセン。
書き込みをした後、自己解決をしたのですが締め切れませんでした。
私も深度を疑ったのですが、MCに付けた連番と同じものを深度にしていたので深度は0以上だったので、他に理由が分からずに質問をさせて頂きました。
その後、何度か試してみたら突然消えるようになったので逆に何故それまでは消えなかったのかが未だに良く分かりません。
とても丁寧にお返事を下さいまして本当にありがとうございます。
ムービークリップに onClipEvent (enterFrame) を書くと CPU の無駄づかいになるんですね。 知りませんでした。 試してみます。
また何かありましたら宜しくお願い致します。

お礼日時:2007/04/09 11:02

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