• ベストアンサー

ムービークリップの領域をシェイプの形状にしたい

よろしくお願い致します。 ムービークリップにマウスオーバーするとムービークリップが再生し、マウスアウトすると逆再生するというものを作っています。 ここで、ムービークリップのマウスオーバーする領域を矩形ではなく、見たままの形(シェイプの形状)だけに指定するにはどうすれば良いでしょうか? 現在の状況は、マウスオーバーさせるムービークリップに onClipEvent (load) { this.stop(); } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, false)) { this.nextFrame(); } else { this.prevFrame(); } } のアクションを書いています。 自分なりに調べたところ、「shapeFlag?というものを使うらしい?」というのは分かったのですが、どう使えば良いのかさっぱり分かりません・・ どなたかご指導頂けないでしょうか。 どうぞよろしくお願い致します。

  • mfu
  • お礼率89% (17/19)
  • Flash
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

あまり深く考えず, 普通に,onイベントハンドラで行けば良いのではないでしょうか。 ---------------------------------- onClipEvent (load) { flag = "0"; } on (rollOver) { flag = "1"; } on (rollOut, dragOut) { flag = "2"; } onClipEvent (enterFrame) { if (flag == "0") { this.stop(); } else if (flag == "1") { this.nextFrame(); } else if (flag == "2") { this.prevFrame(); } } ---------------------------------- on (rollOver) や on (rollOut, dragOut) で変数 flag の値を変えてやって, その flag によって, enterFrame で動かす。 FlashMX以上だと,ムービークリップにも on が使えます。

mfu
質問者

お礼

ご回答ありがとうございます! このままコピーペーストしたらバッチリでした。 (実行してみるとロード後ムービークリップが再生してしまったので、flag = "0";の上にthis.stop();を付け加えたところ解決しました) 大変助かりました。ありがとうございました。 flagというものを使った事がなかったので、勉強して今後も活用しようと思います。 ちなみにFLASH MX2004です。説明が足らず、失礼致しました。

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

hitTest には2種類の衝突判定があり、渡すパラメータによって動作が異なります。 1つはムービークリップのインスタンス名を渡した場合で、ムービークリップ同士の衝突を判定します。 この衝突判定では、2つのムービークリップを四角い形として判定を取ります。 例えば円が描かれているムービークリップの場合、四隅の絵のない部分が接していても衝突している( = true )と判断されます。 もう1つはムービークリップとある1点の座標との衝突を判定するもので、X・Y座標と true もしくは false のどちらかの、3つをパラメータとして渡します。 この判定方法は主に、マウスカーソルがムービークリップと重なっているかどうかを判定する時に用いられます。 3番目のパラメータ( true または false )が shapeFlag と呼ばれるものです。 true を渡すとムービークリップの形通りに、false にするとムービークリップを四角い形と見なして判定を取ります。 ご質問文のスクリプトで  > if (this.hitTest(_root._xmouse, _root._ymouse, false)) この、false の部分を true にしてみてください。 ムービークリップの絵のない部分には、マウスカーソルが反応しなくなります。

mfu
質問者

お礼

ご回答ありがとうございます。また、先日も良回答を頂きありがとうございました。 今回はマウスオーバーさせるムービークリップの下に違うムービークリップが重なっていた為、このやり方ではうまく動かなかったのでsassakun様に教えて頂いた方法を使わせて頂きましたが、 if (this.hitTest(_root._xmouse, _root._ymouse, false))と if (this.hitTest(_root._xmouse, _root._ymouse, true))の違いがやっと分かりました。 (ここが分からなくて混乱していたのです) 大変勉強になりました。ありがとうございました。

関連するQ&A

  • マウスに追従するクリップの範囲について

    はじめて投稿します。初心者ですが、よろしくお願い致します。 マウスに追従するムービークリップについて onClipEvent(enterFrame){ this._x += (_root._xmouse - this._x)/10; this._y += (_root._ymouse - this._y)/10; } としておりますが、マウスがムービーの中に入ったときだけ 反応するようにし、マウスがムービーの外にでるとムービー クリップが定位置に戻るようにしたいのですが よい方法がありましたら教えてください。 定位置に戻るときも追従の流れを残したまま、ゆっくり定位置に 戻るようにしたいと思っております。 よろしくお願いいたします。 Win XP : MX 2004

    • ベストアンサー
    • Flash
  • ゲージと連動したムービークリップのアニメーションを動かす方法

    アクションスクリプト初心者です。 サンプルでいただいたムービーを参考に、ファイルを作成しなければならないのですが、うまく動かなくて困っています。 画面に横に長い帯(ゲージ)を置き、その上をマウスで横にスライドさせると、ムービークリップの中のアニメーションがマウスの動きと連動して動くというアニメーションなのですが、うまく動きません。 サンプルでいただいたファイルの帯(ゲージ)の部分、(これもムービークリップです) には -------------------------------------------- onClipEvent (mouseMove) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { _root.pressure.gotoAndStop(Math.round(((_root._xmouse)/12))); } } -------------------------------------------- と入っていました。 他には、STOPしか入っていませんでした。 数値を変えてみたりしたのですが、アニメーションの途中から動いたり、うまく連動してくれません。 どうやら、サンプルでいただいたムービーと、ファイルサイズが違うことと、新たに作成するファイルは、帯(ゲージ)を画面の右側に置かなければいけないところがうまくいかない原因のひとつかと、わからないながらに思っているのですが・・・; 環境は、Windows2000、FLASHMX2004です。 どなたか、よろしくお願いします。m(__)m

  • マウスを追いかける

    ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン1にシンボル(ただの図形と追いかけてほしいムービー:mc1)を置いて、mc1に下記のスクリプトを書きました。 -------------------------------------------- onClipEvent (load) { _root.mc1.startDrag(true); x = _root._xmouse; y = _root._ymouse; } onClipEvent (enterFrame) { _x += (_root._xmouse-_x)/4; _y += (_root._ymouse-_y)/4; } --------------------------------------------

    • ベストアンサー
    • Flash
  • 外部swfを読み込んだときだけMouse.hide();させたい。

    よろしくお願いします。 ドキュメント上に空のムービークリップを作り、その中の入れ子のボタンを押すと外部swfを表示するflashを作ったのですが、その外部swf、仮にhoge.swfを読みこんで、そのときだけマウスを隠して(ムービークリップをマウス代わりに)、ボタンで違う外部swf、仮にogeをよみこんだときはマウスを表示させることは可能でしょうか? onClipEvent (enterFrame) { this._x=_root._xmouse; this._y=_root._ymouse; Mouse.hide(); } 上記のスクリプトでマウスを消すと、ogeを読み込んでもマウスが消えっぱなしです。 多分if文を使って if (hogeを読み込んだら){ this._x = _root._xmouse; this._y = _root._ymouse; Mouse.hide(); } //そうでなかったら、 else { Mouse.show(); } みたいな感じなのでしょうが、うまく機能しません・・・。 ご教授お願い致します。

    • ベストアンサー
    • Flash
  • 良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

    ■例文: ---------------------------------------------------------------- onClipEvent (enterFrame) { if ( this.hitTest(_root.char1)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char2)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char3)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char4)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char5)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char6)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char7)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char8)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char9)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char10)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char11)) { _parent.nextFrame(); } } ---------------------------------------------------------------- 上記は、_root.char1 から_root.char11までインタンス名をつけたムービークリップとのヒット確認をするアクションスクリプトです。 こういう動作をしたい場合。 for文を駆使する等で、ソースを短くまとめる方法はありませんでしょうか。 いい案がありましたら、是非ご教授の程宜しくお願い致します。

    • ベストアンサー
    • Flash
  • Flash マウスの位置で速さの変わるスクロールメニュー

    Flashでスクロールメニューを作成したいのですが、うまくいきません。 ボタンを羅列しムービークリップにし、 onClipEvent (load) { Min = -80*15; speed = 20; } onClipEvent (enterFrame) { if (_parent.mask.hitTest(_root._xmouse,_root._ymouse,0)) { this._x -= _parent.mask._xmouse/speed; if (this._x >0) { this._x += Min; } else if (this._x < Min) { this._x -= Min ; } } } 上記のスプリクトを記述することで動かすことには成功しました。 しかし上記スプリクトでは、ドキュメントサイズ内では、メニューにマウスオーバーしないと制止してしまいます。 http://www.sophia-eternal.com/ 上記サイトの様に、読み込んだ時から常にゆっくりスクロールし、 マウスオーバーした時にのみ動きの速さを変えるにはどのようなスプリクトを追加すればよろしいでしょうか? メニューのみのFlashファイルを作成し、HTMLで組み立てれば早いのですが、 デザイン上、ページ全体を1つのFlashファイルで作成するしかありません。 メニューが常にスクロールしていて、マウスオーバーした時にのみ動きの速さが変わる様にしたいのです。 宜しくお願い致します。

  • ムービークリップを削除したい

    FLASH 5 を使っています。 現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。 複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。 別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。 hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。 複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに onClipEvent (enterFrame) { if (this.hitTest( _root.gomi )) { this.removeMovieClip (); } } と書いてみたのですがダメでした。 なにぶん Actionscriptを始めたばかりで、良く分かりません。 お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 下からスライドしてくるメッセージ

    こんにちは。 フラッシュ初心者です。画面下に、タブを出しておいてマウスオーバーすると上にスライドしてメッセージが出るというものを作っているんですが、位置の指定がうまくいきません。 もともと横にスライドするサンプルを見つけまして、縦に動くようにカスタマイズしているのですが…。 最初の位置の指定はできました。動きも縦になったのですが上に行き過ぎてしまうのです…。 メッセージ枠の幅だけ上に上がるようにするか、または上から○pxのところまで上がるように指定したいのですが、この場合どうすればよいのでしょうか? ↓今、こんな感じで作ってます。ステージはw400px×H200pxです。 onClipEvent (load) { this._y = 180; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { this._y -= (this._height-this._y)/_root.speed; } else { this._y += (180-this._y)/_root.speed; } }

    • ベストアンサー
    • Flash
  • マウスカーソルについてくる前に左上にいってしまう。

    こんにちは。 マウスカーソルについてくるムービークリップをマスクにして使用したいため、 目的のムービークリップに onClipEvent (enterFrame) { _x += _xmouse/3; _y += _ymouse/3; } というActionScriptを入れました。 きちんと思うように動くのですが、 読み込んだあと、一瞬まず左上に移動してしまいます。 マウスカーソルをうごかして、はじめてマウスカーソルに近づいてきます。 左上に移動してしまうのは格好が悪いので、配置した位置からマウスカーソルに近づいて欲しいのですが、色々調べてもその説明がありません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash