質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Flash

    70questions

    Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

  • ActionScript 3

    44questions

    ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

  • Flex 4

    5questions

    Flex 4とはRIAのライブラリです。version 4.6 まではAdobe Flex SDK でしたが、4.8.0 から Apache Flex SDK となりました。

mouseChildrenで無効に子のマウスイベントが元に戻らない

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,428

Qoo

score 853

AS3でドラッグ中に子のマウスイベントを無効にし、
ドラッグ終了後、マウスイベントを有効にしたいのですが、
mouseChildrenをfalseにすると、無効になるのですが、
trueに戻しても、マウスイベントが有効になりません。
なぜでしょうか?

ドラッグイベント終了後、子がマウスイベントを受け取るようにするにはどうすれば良いでしょうか?


this.addEventListener(MouseEvent.MOUSE_DOWN, f_begin);
this.addEventListener(MouseEvent.MOUSE_UP, f_end);

private function f_begin(e:MouseEvent):void
{    
 this.mouseChildren=false;
 this.startDrag(); 
}

private function f_end(e:MouseEvent):void
{                
 this.stopDrag();                
 this.mouseChildren=true;
                
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

以下のようなコードを前提とした場合、78行目の 「_child1.mouseChildren = false;」により、画面上の水色の矩形をドラッグしたとき、”StopDragEcho” は表示されなくなります。
実際にご利用のコードがどんな内容かによって結果は代わってくると思いますが、参考になればご利用ください。

package 
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;

    /**
     * ...
     * @author kenics
     */
    [SWF(width="400",height="300",frameRate="24",backgroundColor="0x000000")]
    public class DragDrop extends Sprite 
    {
        private var _canvas:Sprite = new Sprite();


        private var _child1:Sprite = new Sprite();
        private var _child2:Sprite = new Sprite();

        private var _rec:Rectangle;

        public function DragDrop() 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            addChild(_canvas);

            _canvas.x = 0;
            _canvas.y = 0;
            _canvas.graphics.clear();

            createChild(_canvas,_child1,0,0,150,150,0xffffff);
            createChild(_child1,_child2,50,50,50,50,0x00fffff);

            _child1.addEventListener(MouseEvent.MOUSE_DOWN, dragStart);
            _child1.addEventListener(MouseEvent.MOUSE_UP, dragEnd);


            _child2.addEventListener(MouseEvent.MOUSE_DOWN, dragStartEcho);
            _child2.addEventListener(MouseEvent.MOUSE_UP, dragEndEcho);


            //ドラッグ範囲のプロパティ(範囲のx座標,範囲のy座標,範囲の横幅,範囲の縦幅)
            _rec = new Rectangle(0, 0,400 - _child1.width, 300 - _child1.height); 



        }
        private function createChild(parent:Sprite,target:Sprite,x:int,y:int,w:int,h:int,color:int):void 
        {

            target.graphics.beginFill(color);
            target.graphics.drawRect(0, 0,w, h);
            target.graphics.endFill();
            target.x = x;
            target.y = y;
            target.useHandCursor = true;
            target.buttonMode = true;
            parent.addChild(target);


        }

        private function dragStart(event:MouseEvent):void 
        {
            trace("StartDrag");
            _child1.mouseChildren = false;
            _child1.startDrag(false, _rec);
        }

        private function dragEnd(event:MouseEvent):void 
        {
            trace("StopDrag");
            _child1.mouseChildren = true;
            _child1.stopDrag();
        }
        private function dragStartEcho(event:MouseEvent):void 
        {
            trace("StartDragEcho");
        }

        private function dragEndEcho(event:MouseEvent):void 
        {
            trace("StopDragEcho");
        }
    }

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Flash

    70questions

    Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

  • ActionScript 3

    44questions

    ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

  • Flex 4

    5questions

    Flex 4とはRIAのライブラリです。version 4.6 まではAdobe Flex SDK でしたが、4.8.0 から Apache Flex SDK となりました。