• 締切済み

マウスがステージ外に出た事の判断方法

Fhashを勉強中の者ですが、下記のサイトの様なイメージのFlashを作成したいと思っています。 http://www.scratchbrain.net/cm/ (ステージ内を幾つかのブロックに分割し、マウスオンするとマウスに追随する枠にコメントが表示され、マウスがステージ外に出るとコメントの枠が消えるコンテンツ) mcをボタン化したものを画面内に幾つか配置してインスタンス名を設定し、mc.onRollOver = function() {}でmc上をマウスオンすれば表示枠内の内容を変える事は出来ました。 次にステージの外(上下左右)に出たらサンプルの様に表示枠を小さく縮小するか、アルファを下げて見えなくしたいのですが、そのやり方が分からず悩んでいます。 マウスの座標(_xmouse、_ymouse)による判断だとマウスがステージ外にはみ出すと上手く行かず、ステージと同サイズのmcを作成して大きなボタンにしてmc.onRollOut = function() {}だと、ボタン同士の上下が重なるので作動しません。 何か良いやり方やアイデアがあれば、是非お教え下さい。 (Windows XP、FlashCS3、AS2)

  • Flash
  • 回答数3
  • ありがとう数4

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

#1(#2)です。 サンプルを回答する時間がとれましたので, #1&#2 の補足回答をします(書いている内容自体は大筋で全く同じです。) ステージ上に下↓の図のようにムービークリップを作成したとします。 階層構造は次のようになっているものとします。  _root(メインのタイムライン)    ├text_mc    │ └_txt(ダイナミックテキスト(_txtはインスタンス名))    ├s_mc0    ├s_mc1    ├s_mc2    └s_mc3 この場合, _root のフレーム1には次のようなスクリプトを書けば, ご質問で書かれていらっしゃるような内容に近いものができます。 /////////////////////////////////////////////////////////////// // 各MCにマウスが乗った時の表示文字配列を準備 var text_arr:Array = new Array(); text_arr[0] = "赤いMCです"; text_arr[1] = "青のMCです"; text_arr[2] = "黄色ですね"; text_arr[3] = "緑ですよ"; // 各MCをクリックした時にジャンプするURLデータ配列を準備 var url_arr:Array = new Array(); url_arr[0] = "AAA.html"; url_arr[1] = "BBB.html"; url_arr[2] = "CCC.html"; url_arr[3] = "DDD.html"; // ステージ上にマウスがあるかないかの変数「on_flag」を用意 var on_flag:Boolean = false; // 変数 text_size の宣言及び初期化 var text_size:Number = 0; // for文カウントアップ用変数 i の宣言 var i:Number; //マウス追従するテキスト入りMC「txet_mc」の初期状態 text_mc._xscale = text_mc._yscale=0; text_mc._txt.text = ""; // マウスのインアウト検知用のMC「big_mc」を作成 this.createEmptyMovieClip("big_mc", 0); // 「big_mc」 をステージの大きさの透明な塗りで塗りつぶす big_mc.beginFill(0x000000, 0); big_mc.moveTo(0, 0); big_mc.lineTo(Stage.width, 0); big_mc.lineTo(Stage.width, Stage.height); big_mc.lineTo(0, Stage.height); big_mc.lineTo(0, 0); big_mc.endFill(); // 「big_mc」にマウスが乗ったときに実行 big_mc.onRollOver = function():Void { // 「on_flag」 を true にする on_flag = true; // 変数 text_size に 100 を代入 text_size = 100; }; // 「big_mc」からマウスが離れたときに実行 big_mc.onRollOut = big_mc.onDragOut=function ():Void { // 「on_flag」 を false にする on_flag = false; // 変数 text_size に 100 を代入 text_size = 0; }; // big_mc クリック時の動作 big_mc.onRelease = function():Void { // 「s_mc0」~ 「s_mc3」に対してのループ for (i=0; i<=3; i++) { // もし 「s_mc0」~ 「s_mc3」にマウスがヒットしていれば if (_root["s_mc"+i].hitTest(_root._xmouse, _root._ymouse, true)) { // そのMCに対応するURLにジャンプ getURL(url_arr[i]); } } }; // 1フレーム進む時間毎に毎回実行 this.onEnterFrame = function():Void { // text_mc のサイズを変える text_mc._yscale = text_mc._xscale += (text_size-text_mc._xscale)/3; // text_mc をマウス追従させる text_mc._x += (_root._xmouse-text_mc._x)/5; text_mc._y += (_root._ymouse-text_mc._y)/5; // 「s_mc0」~ 「s_mc3」に対してのループ for (i=0; i<=3; i++) { // もし 「on_flag」 が true であって if (on_flag) { // なおかつ 「s_mc0」~ 「s_mc3」にマウスがヒットしていれば if (this["s_mc"+i].hitTest(_root._xmouse, _root._ymouse, true)) { // マウスがヒットしているMCの不透明度を50にする this["s_mc"+i]._alpha = 50; // text_mc 内の _txt にそれに対応する text_arr 要素を表示 text_mc._txt.text = text_arr[i]; // 「s_mc0」~ 「s_mc3」にマウスがヒットしていなければ } else { // マウスがヒットしているMCの不透明度を100にする this["s_mc"+i]._alpha = 100; } // 「on_flag」 が false であれば } else { // マウスがヒットしているMCの不透明度を100にする this["s_mc"+i]._alpha = 100; } } // もし 「on_flag」 が false であれば if (!on_flag) { // text_mc 内の _txt の表示を空にする text_mc._txt.text = ""; } }; /////////////////////////////////////////////////////////////// マウスがステージから出たか出ていないかの検知用ムービークリップは 図示できませんし作成すると後の操作なども面倒になるなのでスクリプトで作成しています。 特にスクリプトで作成しなければならないこともありませんから手動で作ってくださっても良いと思います。 また ActionScript2.0 と一言で言っても Flash Player 6 以上であれば動作するという幅広いものです。 もし Flash Player 8 以上対応でも良い場合は, 上のスクリプトの検知用ムービークリップを作るまどろっこしい部分, // マウスのインアウト検知用のMC「big_mc」を作成 this.createEmptyMovieClip("big_mc", 0); // 「big_mc」 をステージの大きさの透明な塗りで塗りつぶす big_mc.beginFill(0x000000, 0); big_mc.moveTo(0, 0); big_mc.lineTo(Stage.width, 0); big_mc.lineTo(Stage.width, Stage.height); big_mc.lineTo(0, Stage.height); big_mc.lineTo(0, 0); big_mc.endFill(); この部分を 次のように変えても良いかもしれません。 // マウスのインアウト検知用のMC「big_mc」を作成 this.createEmptyMovieClip("big_mc", 0); // BitmapDataクラス の import import flash.display.BitmapData; // ステージと同じ大きさの を作成(透明) var bmd:BitmapData = new BitmapData(Stage.width, Stage.height, true, 0x00000000); // 「big_mc」内の深度0にBitmapDataインスタンスを呼びだす big_mc.attachBitmap(bmd, 0); これだけではなくまだ他にも検知用ムービークリップを作成する方法はあります。 どれが良いというものでもないので, どういう方法にするかは好みやバージョンなどによって変えれば良いと思います。 === === === === === === #1 の補足より引用 > 制御にフラグを使う方法は知りませんでした。 > (アナログ人間なのでフラグのイメージが難しいですが…) 念のため補足します。 #1 で書いたフラグの意味は, 上↑のスクリプトで使っているフラグ  // ステージ上にマウスがあるかないかの変数「on_flag」を用意  var on_flag:Boolean = false; このフラグのことではありません。 #1で書いた意味のフラグが登場するのは, この#3回答で書いたムービークリップやスクリプトができてから先の話です。 上のスクリプト場合は,   各ムービークリップにマウスが乗ると   アルファ(不透明度)が50になる というものです。 こういうものの場合,フラグは必要ないと言えばないので, #1で書いた内容のフラグは用意していません。 上のような   各ムービークリップにマウスが乗ると   アルファ(不透明度)が50になる というものではなくて   各ムービークリップにマウスが乗ると   そのムービークリップが1回だけ点滅する というものを作る場合, 方法によっては 「1回だけ点滅する」 ではなく 「点滅し続ける」 ということになりかねません。 または 「光ったままで止まってしまう」 ということが起こるかもしれません。 点滅させる方法にもよりますから何とも言えませんが。 (タイムラインを使う点滅でもムービークリップを入れ子にすると避けることができますが。) そういうときにフラグが必要かもしれませんねという意味です。 フラグとは狭義には「true または false を値とするON/OFFスイッチのような変数」ですが, この「点滅し続ける」ような問題を解決するにはそういう狭義のフラグではなく, ヒットしているムービークリップを数値化した値などを使う方が簡単で良いように思います。 意味的にはフラグですが,「true または false」 だけではないフラグです。 例えば, 初期段階でフラグの値を -1 にしておいて, 「s_mc1」にマウスが乗った時は フラグが 1 でなければ ○○ を実行して,即フラグを 1 にする。 「s_mc2」にマウスが乗った時は フラグが 2 でなければ ○○ を実行して,即フラグを 2 にする。 「s_mc3」にマウスが乗った時は フラグが 3 でなければ ○○ を実行して,即フラグを 3 にする。 「s_mc4」にマウスが乗った時は フラグが 4 でなければ ○○ を実行して,即フラグを 4 にする。 みたいな感じです。  --- 実行シミュレーション ------  もし最初に 「s_mc1」にマウスが乗ったとする  「フラグが 1 でなければ ○○ を実行して,即フラグを 1 にする。」   →初期状態で フラグは -1 になっているので ○○ は実行される     その次の瞬間にも 「s_mc1」 にマウスが乗っていた場合は,     フラグは 1 なので,何度も同じ ○○ が実行されることはない。  もし次に 「s_mc4」 にマウスが乗ったとする  「フラグが 4 でなければ ○○ を実行して,即フラグを 4 にする。」   →前の状態で フラグは 1 になっているので ○○ は実行される     その次の瞬間にも 「s_mc4」 にマウスが乗っていた場合は,     フラグは 4 なので,何度も同じ ○○ が実行されることはない。  もし次にまた 「s_mc1」にマウスが戻ったとする  「フラグが 1 でなければ ○○ を実行して,即フラグを 1 にする。」   →前の状態で フラグは 4 になっているので ○○ は実行される     その次の瞬間にも 「s_mc1」 にマウスが乗っていた場合は,     フラグは 1 なので,何度も同じ ○○ が実行されることはない。          ↓↓ つまり ↓↓     マウスが乗り続けている場合は同じ動作はし続けないが     一度離れて再び乗ったときにはちゃんと1回だけ動作する  ------------------------ 行けますね。 これだと, たくさんのフラグを用意する必要はなくなりますから, フラグの管理が楽になります。 このフラグは要るのか要らないのかはわかりません。 つくるものによって 要・不要 が変わります。 全体的にはActionScript自体が難しいのではなくて, 「この場合はこうする」 という 「場合」 を考える(シミュレーションする)のが難しい気がします。 一種のエラー処理(想定範囲外行動をとられた場合の処理)の対処プログラムを作成し続けるのに近い感じでしょうか。

megumi0304
質問者

お礼

いろいろとご丁寧な説明を頂きありがとうございました。 遅くなりましたが、お礼を申し上げます。

megumi0304
質問者

補足

ご丁寧な解説ありがとうございました。 サンプルがあると大変分かりやすいです! ほぼ思い通りのイメージが完成しましたが、あと一つ質問があります。 2つの変更を入れました。 (1)マウスをステージ右端に移動してもtext_mcが外に出ない様に、マウスのx座標に応じて徐々にtext_mc._xを変更。 (2)表示文字数に応じてtext_mcの幅をtext_mc._txt.lengthで変更。 (1)はStage.widthとtext_mc._widthのサイズを比較させて移動が出来たのですが、(2)で問題が出てきました。 text_arrが全角の場合は良いのですが、半角だと無駄に余白が空いてしまいます。 いろいろ調べたところBlurFiltanさんの下記の回答を拝見しました。 ----------------------------------------- 【ActionScript】全角半角の判別はできますか? http://oshiete1.goo.ne.jp/qa3351087.html ----------------------------------------- 上記を参考に紹介されているスクリプトを一部変更して全角半角でもあまり変わらない様に考えてみました。 (単純に1バイト文字と2バイト文字で掛ける数値を変えて、「W」と「l」など、各文字によるプロポーションの差は無視しました) //------(80行あたりの抜粋)------ // マウスがヒットしているMCの不透明度を50にする this["s_mc"+i]._alpha = 50; // text_mc 内の _txt にそれに対応する text_arr 要素を表示 text_mc._txt.text = text_arr[i]; //変数 btn に text_arr 要素を代入 btn = text_arr[i]; // ユーザ定義関数 getStrWidth の実行 getStrWidth(btn); // 「s_mc0」~ 「s_mc3」にマウスがヒットしていなければ } else { // マウスがヒットしているMCの不透明度を100にする this["s_mc"+i]._alpha = 100; } //------(抜粋ここまで)------ // ユーザ定義関数 getStrWidth の定義 引数S function getStrWidth(S) { //文字列の 1バイトの数を表す変数「byte1」の初期化 byte1 = 0; //文字列の 2バイトの数を表す変数「byte2」の初期化 byte2 = 0; // Sの文字数分ループ for (i=0; i<S.length; i++) { // 1バイトと2バイトの条件分岐 if (S.charCodeAt(i)<=255) { byte1 += 1; } else { byte2 += 1; } } //text_mcのサイズ調整 text_mc._width = byte1*8+byte2*13; text_mc._height = 25; } 試行錯誤しても上手く作動せず、問題がよく分からないままです。 これは簡単に解決できる事なのでしょうか?

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > どの様にすればhitTestを使い、 > ステージぴったりに重なったmcの外にマウスが出たのかを判断できるのでしょうか? ですから, それは#1にも書きましたように, > ステージと同サイズのmcを作成して大きなボタンにして > mc.onRollOut = function() {} というのが定石です。 つまり最初のご質問に書かれていらっしゃることが正解です。 hitTest ではちゃんと検知できません。 mc.onRollOut = function() {} で検知するようにすると, 今度は各ボタンが利かなくなるでしょう? その各ボタンにマウスが乗ったことを hitTest で検知させるのです。

megumi0304
質問者

補足

ありがとうございます。 すみません、全く逆に勘違いしていました… ●ステージ上のボタンの判断→mc.hitTest(_root._xmouse, _root._ymouse, 1) ●ステージ全体の中外の判断→mc.onRollOut = function() {} なのですね。 これで一度組み直してやってみます。

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

AS2 の場合は,書かれていらっしゃるとおり > ステージと同サイズのmcを作成して大きなボタンにして > mc.onRollOut = function() {} というのが定石です。 ですからそこまでは間違いありません。 そして, 各ボタンへのロールオーバー(正確には各ムービークリップへのロールオーバー)には, ムービークリップとマウスの hitTest を使います。 Flashゲーム講座&ASサンプル集【当たり判定について】 http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html など。 ただし, hitTest は onEntreFrame や onMouseMove などのタイミングでずっと監視&動作し続ける必要がありますから, 連続重複動作をしてしまう可能性があります。 そこで, Flag(フラグ/旗印)を使って制御するなどの工夫が必要になります。 私の最近の回答例ですが。 「mcのx座標が50以上になったら次フレーム」 http://okwave.jp/qa4903715.html 「ポップアップを一定時間、またはマウスが乗っている間表示させておく」 http://okwave.jp/qa4887472.html

megumi0304
質問者

補足

お返事遅れてしまい申し訳ございません。 回答頂きありがとうございます! 「hitTest」の衝突判定を使うのは勉強になりました。 制御にフラグを使う方法は知りませんでした。(アナログ人間なのでフラグのイメージが難しいですが…) リンクを拝見して考えてみたのですが、よく分からないのでお教えください。 ステージと同じサイズの背景の「area_mc」を作成し、メインのフレームに以下を記述しました。 //------------------------------------ area_flg = false; mouse_obj = new Object(); mouse_obj.onMouseMove = function() { if (_root.area_mc.hitTest(_root._xmouse, _root._ymouse, 1)) { if (!area_flg) { area_flg = true; trace("in"); } } else if (area_flg) { area_flg = false; trace("out"); } }; Mouse.addListener(mouse_obj); //------------------------------------ しかし、マウスがステージ上(area_mc上)に重なると「in」になるのですが、ステージ外に出ても「out」になりません。 ステージを広げてarea_mcとの余白を作れば「out」と認識されるのですが… どの様にすればhitTestを使い、ステージぴったりに重なったmcの外にマウスが出たのかを判断できるのでしょうか? お手数をお掛けしますがよろしくお願い致します。

関連するQ&A

  • マウス 追従 範囲外

    マウスを追いかけるMCを以下のように設定しましたが、 MCが動いている範囲外にマウスがいるときは追いかけるのを やめにしたい場合どのように記述すればよろしいでしょうか。  onClipEvent (mouseMove) { if (_root._xmouse >左 && _root._xmouse <右) { this._x = _root._xmouse; } if (_root._ymouse >上&& _root._ymouse <下) { this._y = _root._ymouse; } } 範囲外にマウスがいるときは定位置にmcを表示させるか、 表示を消したいです。 ちなみにmcが動く範囲の指定方法はネット上から探してきました。 別の方法でもっと適した記述があれば教えてください。

  • マウスポインタがステージ外に出たことを感知

    こんにちは、初めて質問します。 マウスポインタがステージやムービークリップの外に出たことを感知することは可能でしょうか? マウスポインタの後を追いかけるような演出をしたいのですが、ステージ外にマウスポインタがあるときはその演出を消したいんです。マウスポインタが外に出たら_visibleプロパティをfalseしようと思っているのですがその「マウスポインタが外に出たら」というのがむずかしくて・・・ _xmouseや_ymouseをnullにしたら感知するかなと思ったんですが、うまい具合にいかなくて困ってます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • マウスを追いかける

    ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン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
  • マウスカーソルをカスタマイズしたのですが…

    FlashCS4でAS3.0を使用しています。 マウスポインタを任意の形を作成して、ムービークリップにして、インスタンス名を「point_mc」として、ステージ上に配置し、スクリプトを下記のように記述しました。 ---------------------------------------------------------- Mouse.hide(); stage.addEventListener(MouseEvent.MOUSE_MOVE, function(e){ point_mc.x=stage.mouseX; point_mc.y=stage.mouseY; }); --------------------------------------------------------- その後にムービープレビューしますと、マウスのカーソルが先の任意に作成(point_mc)したのに変わってました。 そこまでは良かったのですが、その変わったマウスをボタンインスタンス(インスタンス名:skip_bt)に乗せても、ロールオーバーもしなければ、ボタンをクリックする事が出来ないのです。 因みに「skip_bt」に対するスクリプトは下記のように記述しました。 -------------------------------------------------------- skip_bt.addEventListener(MouseEvent.CLICK, introClick); function introClick(evt:MouseEvent):void { gotoAndStop("intro"); } -------------------------------------------------------- このままだと、ただマウスカーソルが、任意で作成したムービークリップになっているだけで、ボタンを押したりする事が出来ません。クリックする事が出来なくて困ってます。 解る方がおりましたら、アドバイス・ご指導をお願い致します。 よろしくお願い致します。

  • マウスアウトで非表示にする

    シーン1に、mc(ムービークリップ)とcomment1(ムービークリップ)を配置 mcにマウスオーバーするとcomment1が表示される。 mcよりマウスアウトするとcommen1が非表示になる。 という感じにしたいのですが、マウスアウトしても非表示に出来ないで困っています。 //----------------------------------- MovieClip(root).comment1.visible = false; var pointX:Number=70; var pointY:Number=50; mc.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); function fl_MouseOver(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunc); function mouseMoveFunc(e:MouseEvent):void { MovieClip(root).comment1.visible = true; MovieClip(root).comment1.x=stage.mouseX+pointX; MovieClip(root).comment1.y=stage.mouseY+pointY; } } mc.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOver2); function fl_MouseOver2(event:MouseEvent):void { mc.removeEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); MovieClip(root).comment1.visible = false; } //-----------------------------------

    • ベストアンサー
    • Flash
  • マウスカーソルに応じたmcのスクロール(ループ型)

    マウスカーソルに応じて、複数配置してるmcがカーソルに合わせてスクロールして、ステージからはみ出したら、はみ出した側のステージの反対から出てくるっていうscriptを作ったのですが、うまくいきません。ループしてくれないんです。 ---- _root ---------------------- menu.mcというのがあり、そのmcの中にmenu01.mc、menu02.mc、menu03.mc・・・という感じでmcが配置してあります。menu.mc自体に別のスクリプト掛けてるので、こういう形にしてます。 ---- _root>menumc ---------------------- menu01.mcなどそれぞれのmenuのmcが入ってます。 さらに、それぞれのmcの中にscroll.mcというのをおき、そのscroll.mcにscriptが書いてあります。 ---- _root>menu.mc>menu01.mc 内scroll.mcのscript------ _visible = false; center = Stage.width/2; halfWidth = _parent._width/2; this.onEnterFrame = function() {  with(_parent){  //Scroll Speed   if (_root._xmouse<=180 || (_root._xmouse>250) && (_root._xmouse<=429)) {    moveX = (center-_root._xmouse)/15;   }else if(_root._xmouse>180 && _root._xmouse<=250){    moveX = 0;   }   _x = _x+moveX;   //Return Scroll   if(_x > Stage.width+halfWidth){    _x -= _width+Stage.width;   }else if(_parent._x < -halfwidth){    _x += _width+Stage.width;   }  } }; --------------------- で、これだときちんと思ったような動きでスクロールはするんですが、ただループしてくれないんです。しかもスクロールする毎にそれぞれのmcの間隔がずれてる気がします。最悪の場合だと、mcの上に別のmcが重なったりしてます。 なぜ、このような現象になってしまうのでしょうか?

  • 慣性の効果がついたマウス追従

    マウス追従の効果で教えてください。 http://www.flashiroha.com/script/as8.htmlの慣性効果付加型のスクリプトは AS2.0で書かれています。 onClipEvent(load) { vx=0; vy=0 } onClipEvent(enterFrame) { vx=vx*0.65+(_root._xmouse-this._x)/a; vy=vy*0.65+(_root._ymouse-this._y)/a; this._x+=vx; this._y+=vy; } これをAS3.0で作成していますが、マウスに追従するどころか大きくステージから離れてしまいます。 どのように記述をしたらいいでしょうか。 my_mc.addEventListener(Event.ENTER_FRAME,onEnterframe); var vx ; var vy ; function onEnterframe(eventObj:Event):void{ vx= my_mc.x*0.65+(stage.mouseX-my_mc.x)/2; vy= my_mc.y*0.65+(stage.mouseY-my_mc.y)/2; my_mc.x+=vx; my_mc.y+=vy; trace(my_mc.x); }

    • ベストアンサー
    • Flash
  • hitTestについて教えてください

    var hit = mc.hitTest(_root._xmouse, _root._ymouse); if (hit) { ・・・・ } クリップ上にマウスオーバーしている時に、if分の処理を行うコードを上記のように書きました。 マウスがクリップにマウスオーバーした状態で、ステージ外へと移動するとif分が実行され続けます。 マウスがステージ外へ出たことを知ることは可能でしょうか教えてください。

    • ベストアンサー
    • Flash
  • 線の描画

    使用ソフトはFlashMX2004でMacOSXを使用しています。 線の描画なんですが、他の動きとの関係で マウス位置より85上に線を描画→描画の度に新しいMCを作る→最初に作られたMCから透明になって消える という流れを目指して制作しています。 表現の関係上、btとリンケージ名をつけたボタンを1度押し、離した時に描画位置を指定し、再びボタンを押した時に描画終了という動きをさせたいと思い、以前頂いたサンプルに手を加え var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (osi == 1 &&_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].lineTo(_root._xmouse, _root._ymouse-85); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; updateAfterEvent(); canvases++; osi = 0; }; bt.onRelease = function() { if (osi == 1 &&_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root["can"+canvases].moveTo(_root._xmouse, _root._ymouse-85); } } }; というスクリプトをくみましたが描画されません。 私が手を加えた箇所が間違っているのでしょうか。 一応試行錯誤はしてみたんですが解決策が見当たらず・・・。 間違っていましたらご指摘お願いします。 また、解決策がありましたらご教授お願いします。 このスクリプトがてを加える前の状態です。 this.stop(); canNum = 0; var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { mX = _root._xmouse; mY = _root._ymouse; osi = 1; } else { osi = 0; } }; bt.onRelease = function() { if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { if (osi>0) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].moveTo(mX, mY); _root["can"+canvases].lineTo(_root._xmouse, _root._ymouse-85); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; updateAfterEvent(); canvases++; osi = 0; } } }; 長くなってしまい申し訳ありません。

  • ActionScript2.0での座標について

    「ActionScript2.0で、_xmouse、_ymouse でマウス座標を得られますが、_xmouse、y_mouseで得られる座標の単位はいくつになるのでしょうか? _xmouse、_ymouseを画面に出力してみると、起動するフォームの場所によっては、マイナスの値になったりするのですが、起動するフォームの場所によって値が相対的に変わるものなのでしょうか?」 以前このような質問をした者です。ご回答もいただき、自分でも調べてみて_root._xmouse や _root._ymouse と書けば、ステージの左上のコーナーが_rootの基準点になることは理解できたのですが、ステージに依存しない座標を取得する方法はありますでしょうか。

    • ベストアンサー
    • Flash

専門家に質問してみよう