当たり判定で、下記の様に書きました。
I_blueは青ボールインスタンス名、I_green 緑ボール インスタンス名です。
緑ボールをドラッグ&ドロップで青ボールに重ねると音がでるというものを作ろうとしています。
//
Hsound01 = new Sound(_root.I_blue);
Hsound01.attachSound("HS_sound01");
//
_root.I_blue.onEnterFrame = function() {
if (this.hitTest(_root.I_green)) {
_root.Hsound01.start(0, 1);
}
};
//
I_green.onPress = function(){
startDrag(this,false);
}
I_green.onRelease = function(){
stopDrag();
}
ですが、これだと音が繰り返し再生されてしまいます。
当たり判定で一度だけ音をならすには、どのようにすべきでしょうか。
お知恵をお貸しいただけたらと思います。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
イベント(アクション)の発生が,
> ドラッグ&ドロップで青ボールに重ねると
なのですから,
そもそも onEnterFrame をトリガ(引き金(この場合は監視の役目も含む))とすることが変だと思いますよ。
もっと素直に,そのまま,
「ドラッグ& "ドロップ" で青ボールに重ねると」→「音を鳴らす」
の方が,onEnterFrame で無駄な CPU を毎フレーム使い続けるより,ずっと良いと思います。
つまり,こういうことです↓。
---------------------------------------
Hsound01 = new Sound(_root.I_blue);
Hsound01.attachSound("HS_sound01");
//
I_green.onPress = function() {
startDrag(this);
};
//
I_green.onRelease = function() {
// 青が これ(緑)にヒットしたら
if (_root.I_blue.hitTest(this)) {
_root.Hsound01.start(0, 1);
}
stopDrag();
};
---------------------------------------
※if (_root.I_blue.hitTest(this))
は,
if (.this.hitTest(_root.I_blue))
の方が自然です。
一応,ご質問のスクリプトに書かれている,
if (this.hitTest(_root.I_green))
を尊重して,あえて逆にしています。
> 当たり判定で一度だけ音をならすには…
この「一度だけ」の意味が,
「一回目のドラッグ&ドロップで青ボールに重ねたときに鳴らすだけで,二回目以降は鳴らさない」
という意味でしたら,#1の方の書かれている フラグを使う方法が良いと思います。
---------------------------------------
Hsound01 = new Sound(_root.I_blue);
Hsound01.attachSound("HS_sound01");
// 勝手に決めた変数 flag に 0 を代入
flag = 0;
//
I_green.onPress = function() {
startDrag(this);
};
//
I_green.onRelease = function() {
// 青が これ(緑)にヒットして なおかつ flag が 0 のとき
if (_root.I_blue.hitTest(this) && flag == 0) {
_root.Hsound01.start(0, 1);
flag = 1;
}
stopDrag();
};
---------------------------------------
onEnterFrame や onClipEvent (enterFrame) は,
毎フレーム毎フレーム同じ処理を繰りかえし実行します。
hitTest などの説明するためにはこれらを使うことも良い方法ですが,
実際にご質問にあるような内容のときには極力使わないようにしましょう。
sassakunさん、書き込みありがとうございます。
うっかりしていました(汗)。そうですね。ご紹介のかたちの方がシンプルで明快ですね。しかも負荷も軽い。D&Dではこちらを使うべきなのですね。実はD&Dの場合と 動いているMCの場合の 二つがでてくるものをつくっていまして、使い分けが必要なのですね。
sassakunさんの書き込みから、より深く理解できた気がします。
大変勉強になりました。
書き込みいただきありがとうございました。
No.1
- 回答日時:
onEnterFrame の処理は毎フレームで呼ばれてしまいます。
このコードだと重なっている間(hitTestがtrueの間)ずっと
音の再生が呼び出されます。
簡単にやるなら、何か適当なフラグを用意して
---------------------------------------------------------
// 初回フラグ。trueで初期化しておく
var bFirst:Boolean = true;
_root.I_blue.onEnterFrame = function() {
if (this.hitTest(_root.I_green)) {
// 重なっているとき
if(bFirst) {
// はじめて重なったとき
_root.Hsound01.start(0, 1);
bFirst = false;
}
} else {
// 重なっていないとき
// フラグを戻す。
// 次に重なったときにまた音が再生される
bFirst = true;
}
};
---------------------------------------------------------
な感じでいけるかと思います。
実際にこのコード動かしてないんであまり自信ないです...(^^;
horsewaterさん、書き込みありがとうございます。
ご紹介のかたちでできる様になりました。
変数を使用してみて、試してはいたのですが、上手くできずにいたのですが、ご紹介の方法で「なるほど」という感じでできました。
大変たすかりました。
書き込みありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 英語の関係代名詞の問題について Monday is the day ( ) we feel blue 5 2022/06/26 13:57
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- レトロゲーム 15年くらい前のレトロゲーム(たぶんpc)の名前が思い出せません。 0 2022/08/23 01:11
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- 食べ物・食材 青い果実(果汁) 2 2022/08/25 14:26
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レーダーチャートの描画
-
python ボタンを押すと複数の関...
-
pythonの画像の貼り付けについて
-
else if文の順序を変えることに...
-
ipconfig /releaseって何ですか?
-
テキストボックスの中身をリセ...
-
【ActionScript】Listコンポー...
-
VB6.0 でメニューを作りたいん...
-
プログラミング、アーキテクチ...
-
五芒星は、悪魔崇拝とどういう...
-
OpenGLのグラデーションについて
-
YOASOBI
-
VBAで改行の入ったデータの正規...
-
HTMLのtextbox類に文字を残す
-
VBScriptでMsgBoxのYesNoボック...
-
VBAユーザーホームテキストボッ...
-
【VB.NET】別Formのボタンが押...
-
FLASHで画面の最大化と100%表示...
-
RPG(AS400)の本、サイトってあ...
-
アクションスクリプトでライブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
四乗根を英語で言うと・・・
-
pythonの画像の貼り付けについて
-
SNMPの標準MIBについて
-
PythonでSetWindowPosを使うに...
-
pythonのグローバル変数
-
ボタンの上にマウスを置くと虫...
-
関数をプロパティとして代入する際
-
ADに参加していないPCからADサ...
-
レイヤーに配置されたムービー...
-
[FlashMX2004]動的にファイルを...
-
メニュースクロール
-
パーセントで配置したフラッシ...
-
Flashの表示サイズを動的に変更...
-
スライドショーのフェードイン...
-
swfがきちんと動作しない!
-
フルウィンドウのFlash Firefox...
おすすめ情報