aaaというMCにtimeという名前でsetIntervalを使って
bbbというMCをaaaにドラッグしたらtimeをclearIntervalで動作をやめさせたいのですができません。
MCに設定したIntervalIDは違うMCからclearIntervalを使うことはできないのでしょうか?
環境はFlash MX6を使っています

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> MCに設定したIntervalIDは


> 違うMCからclearIntervalを使うことはできないのでしょうか?

使うことは普通にできますよ。


> aaaというMCにtimeという名前でsetIntervalを使って
> bbbというMCをaaaにドラッグしたらtimeをclearIntervalで動作をやめさせたい

具体的な状況がつかみにくいですね。

階層構造を図にすると次のような感じということでしょうか。

 _root(シーン 1 などメインのタイムライン)
   ├bbb(ムービークリップ) ドラッグ可能
   └aaa(ムービークリップ)
     └time=setInterval(~~)

これ以上のことがよくわかりません。

よくわからないので私が勝手に状況を作ります。

上のような階層構造になっていた上で,
インスタンス名「aaa」のムービークリップ内のタイムラインのフレーム1に
次のように書いていたとします。

----------------------------------------
// 関数 myFunction を 1000ミリ秒間隔で実行
time = setInterval(myFunction, 1000);

// 関数 myFunction の定義
function myFunction() {
trace("何かを実行");
}
----------------------------------------
※↓下図


仮にこのままの状態で 「制御」→「ムービープレビュー」すると,
 何かを実行 何かを実行 何かを実行 何かを実行 …
という文字列が出力窓に約1秒間隔で出力されるものができます。



この場合,
_root に配置した「bbb」というインスタンス名のムービークリップ "自体" には,
次のように書けば,aaa 内の setInterval が削除できます。

----------------------------------------
// このムービークリップを押したとき
on (press) {
// このムービークリップのドラッグを開始
this.startDrag();
}

// このムービークリップを放したとき
on (release, releaseOutside) {
// このムービークリップのドラッグを停止
this.stopDrag();
// もし _root にある aaa にヒットしていたら
if (this.hitTest(_root.aaa)) {
// _root の aaa の time をクリア
clearInterval(_root.aaa.time);
}
}
----------------------------------------



上記のように作った場合は,
至って普通に clearInterval ができます。
何か特殊なことをしているわけではありません。
なるべく シンプル にご質問内容を再現してみただけです。

したがってご質問では,どこが問題なのかがわかりません。

状況によってはうまく clearInterval できないこともあるでしょう。
しかし,
なにしろ具体的状況をいっさい書かれていらっしゃらないので,
どこが原因で clearInterval ができないのは判断のしようがありません。
また,
その原因がわからないので解決策の提示もできません。


よろしければ一度実際に上のようにして簡単なものを作ってみてください。
作ってみて clearInterval ができた場合は,
作成していらっしゃるものと状況がどこか違うはずです。
その違う状況の場所に原因があると思います。

原因がわからない場合は,
そのうまく行かない場合の「なるべく簡素で単純な状況例」を
「補足」に書いてもらうと原因や解決策が見つかるかもしれません。


また,
『うまく行かない場合の「なるべく簡素で単純な状況例」』 を作成してみると,
その時点で,
質問者さん自信でうまく行かない原因がわかるかもしれません。
原因がわかると解決策も簡単に見つかるかもしれません。
つまり自己解決するかもしれません。

問題解決には
「問題を単純化する。問題を切り分ける。」
というのが大切なことです。

「問題を単純化する。問題を切り分ける。」 具体的な方法は,
シンプルで簡単な 「正常動作サンプル」 または 「不具合サンプル」 を作成してみることです。
シンプルで簡単な 「正常動作サンプル」 と 「不具合サンプル」 との相異点に
不具合を起こす 問題点 があります。



--- --- ---

しかし,そもそも,

> bbbというMCをaaaにドラッグしたら

などという複雑な状況を,
すでに作ってしまわれているところに,
問題点が発見できない第一原因があると思います。

なぜ,
「bbbというMCをaaaにドラッグしたら」 という妙で複雑な状況ではなく,
「bbbというMCクリックしたら」 などのような単純なサンプルを作ることができないのでしょうか?

階層(ムービークリップ)が違う場合 clearInterval に動作不具合があるのでしょう?

そう思われるのでしたら,模索をそれに限定すべきです。

ドラッグ などという雑多な要素を加えるから問題点がしぼりにくくなるのだと思います。
雑多な要素を増やすと不具合がどこで起きているか特定しにくくなるだけですよ。
「問題を単純化する。問題を切り分ける。」 ことが大切です。
「clearIntervalについて」の回答画像2
    • good
    • 0

clearInterval(aaa.time);



で、いけませんか?
具体的にASをどう書いているのでしょう。
    • good
    • 0

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


人気Q&Aランキング