- 締切済み
AS2でhittestを用いてシンボルにカーソルが触れたときに効果音をループせずに一回鳴らすというのはどうすれば良いのでしょうか?
AS2でhittestを用いてシンボルにカーソルが触れたときに効果音をループせずに一回鳴らすというのはどうすれば良いのでしょうか? AS2でhittestを用いてシンボルにカーソルが触れたときに効果音をループせずに一回鳴らすというのはどうすれば良いのでしょうか? 現在はボタンのオーバーで音を鳴らしているのですが、クリックしたままカーソルを移動させてシンボルに触れたとき音を鳴らしたいので困っています。 現在のファイルは↓です (右クリックで保存お願いします) http://www.geocities.jp/tales_house/kira2.fla http://www.geocities.jp/tales_house/kira2.swf 解決方法わかる方どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 #1を回答したあとしばらく考えていたのですが, > クリックしたままカーソルを移動させて > シンボルに触れたとき音を鳴らしたい これは『ひんと』と書かれたボタンをクリックするという意味でしょうか? つまり, 「『ひんと』と書かれたボタンをクリックした"後に", マウスカーソルを移動させて,そのマウスカーソルが ムービークリップなどのインスタンスに触れたときに 音を鳴らしたい。」 という意味でしょうか? もしそうであれば hitTest は要りませんよ。 #1同様, ☆(星形ムービークリップ) 内のフレームを2フレームにして, ボタンと同じように フレーム1 には最初に表示されている星の絵を置き, フレーム2 には回る星と音を配置します。 音は,ボタンと同じく,プロパティで同期を「イベント」に設定しておきます。 そういう ☆(星形ムービークリップ) を音の数だけ作ります。 そして☆をステージ上に配置し, それらにインスタンス名を付けます。 たとえば,3つの☆インスタンスをステージ上に配置し, それらに「star_mc0」「star_mc1」「star_mc2」というインスタンス名を付けます。 また, 『ひんと』と書かれたボタンには, 例えば「btn」というインスタンス名を付けます。 その場合, 3つの☆インスタンスとボタンが存在するメインのタイムラインには 次のようなActionScriptを書きます。 --------------------------------------------- // ☆の最終番号を登録 var star_last:Number = 2; // マウスがダウンしているかどうかのフラグの初期化 var down_flg:Boolean = false; // 「star_mc0」~「star_mc○」に関してのループ for (var i:Number = 0; i<=star_last; i++) { // 「star_mc?」 内ライムラインの再生を停止 _root["star_mc"+i].stop(); } // btnをクリックしたときの動作を定義 btn.onRelease = function():Void { // マウスがダウンしているかどうかのフラグをtrueにする down_flg = true; }; // 「star_mc0」~「star_mc○」に関してのループ for (var i:Number = 0; i<=star_last; i++) { // 「star_mc?」 にロールオーバーしたときの動作定義 _root["star_mc"+i].onRollOver = function():Void { // マウスがダウンしているかどうかのフラグがtrueのときのみ if (down_flg) { // 自分自身(star_mc?)をフレーム2で停止 this.gotoAndStop(2); } }; // 「star_mc?」 からロールアウトしたときと // 「star_mc?」 を外で放したときの動作定義 _root["star_mc"+i].onRollOut = _root["star_mc"+i].onReleaseOutside=function ():Void { // 自分自身(star_mc?)をフレーム1で停止 this.gotoAndStop(1); }; } --------------------------------------------- 以上です。 #1よりずっと簡単です。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
1コのボタンの内部についてはわかりましたが, それにしても関係のない雑多なものが多いサンプルですね...。 関係ないものが多いわりには, 肝腎なFlashバージョンも書かれてなかったり(CS3らしいということは色々なバージョンで開いてからわかった), さらに肝腎な↓の意味もよくわかりませんし...。 > クリックしたままカーソルを移動させて > シンボルに触れたとき音を鳴らしたい 何をクリックしたままカーソルを移動させるのでしょうか? 「何でもない場所(Flashステージ上の任意の場所)で マウスダウンした状態のままマウスカーソルを移動させて, そのマウスカーソルが ムービークリップなどのインスタンスに触れたときに 音を鳴らしたい。」 という意味と理解してよろしいでしょうか? (Flashに限らず,そういう奇妙な仕様のものを見たことがないので, 閲覧者にそのルールが理解できるかどうかは知りませんが...。) 作成にあたって,まず理解しておくべきことは, hitTestはムービークリップクラスのメソッドだということです。 つまり,hitTestの左側にはムービークリップが来る必要があります。 ムービークリップ.hitTest(マウスx座標, マウスy座標,true) したがってボタンにはhitTestは使えません。 また,仮にボタンにhitTestが使えたとしても, gotoAndStop() もムービークリップクラスのメソッドですから, ボタン.gotoAndStop("_over"); や ボタン.gotoAndStop(2); のようにボタン内のフレーム移動の指示はできません。 したがって, ☆はボタンではなく,ムービークリップで作成するのが良いと思います。 ☆(星形ムービークリップ) 内のフレームを2フレームにして, ボタンと同じように フレーム1 には最初に表示されている星の絵を置き, フレーム2 には回る星と音を配置します。 音は,ボタンと同じく,プロパティで同期を「イベント」に設定しておきます。 そういう ☆(星形ムービークリップ) を音の数だけ作ります。 そして☆をステージ上に配置し, それらにインスタンス名を付けます。 たとえば,3つの☆インスタンスをステージ上に配置し, それらに「star_mc0」「star_mc1」「star_mc2」というインスタンス名を付けます。 その場合, 3つの☆インスタンスが存在するメインのタイムラインには 次のようなActionScriptを書きます。 --------------------------------------------- // ☆の最終番号を登録(☆インスタンスの数によって変える) var star_last:Number = 2; // マウスがダウンしているかどうかのフラグの初期化 var down_flg:Boolean = false; // 「star_mc0」~「star_mc○」に関してのループ for (var i:Number = 0; i<=star_last; i++) { // 「star_mc?」 内ライムラインの再生を停止 _root["star_mc"+i].stop(); } // マウス監視用オブジェクト「mouseObj」を作成 var mouseObj:Object = new Object(); // マウスをダウンしたときの動作を定義 mouseObj.onMouseDown = function():Void { // マウスがダウンしているかどうかのフラグをtrueにする down_flg = true; }; // マウスをアップしたときの動作を定義 mouseObj.onMouseUp = function():Void { // 「star_mc0」~「star_mc○」に関してのループ for (i=0; i<=star_last; i++) { // 「star_mc?」 内ライムラインをフレーム1で停止 _root["star_mc"+i].gotoAndStop(1); } // マウスがダウンしているかどうかのフラグをfalseにする down_flg = false; }; // マウスが動いたときの動作を定義 mouseObj.onMouseMove = function():Void { // マウスがダウンしているかどうかのフラグがtrueのときのみ if (down_flg) { // 「star_mc0」~「star_mc○」に関してのループ for (i=0; i<=star_last; i++) { // 「star_mc?」 がマウスとヒットしていれば if (_root["star_mc"+i].hitTest(_root._xmouse, _root._ymouse, true)) { // その 「star_mc?」 内ライムラインをフレーム2で停止 _root["star_mc"+i].gotoAndStop(2); } else { // それ以外は 「star_mc?」 内ライムラインをフレーム1で停止 _root["star_mc"+i].gotoAndStop(1); } } } }; // マウスクラスのリスナーとしてmouseObjを登録 Mouse.addListener(mouseObj); --------------------------------------------- 以上です。 とにかく関係のないものは極力排除して, なるべく簡単でシンプルなサンプルで実現させてみることが肝腎です(=問題の切り分けが肝腎)。