0

私が行っているプロジェクトの非常に単純な最初のステップであるメモリタイムラインに取り組んでいます。基本的に、年が記載されたタイムライン。これは線であり、水平方向に移動して選択した年に移動し、イベントや情報を追加できるはずです。

今、私はその線を実装しようとしています。これは無限に広くなければならないと思いますが、ドラッグアンドドロップ機能もあります。

何かが機能していますが、バグがあり、何が問題になっているのかわかりません。私はFlashの経験があまりないので、ここで質問します。

これがコードです。ステージは空で、タイムラインにコードはありません。プロパティから作成されたこの1つのDocumentクラス:

package {

    import flash.geom.Rectangle;
    import flash.events.MouseEvent;
    import flash.display.Sprite;


    public class Document extends Sprite {

        // rootMc, global container
        public static var rootMc:Sprite = new Sprite();
        public var test:Sprite = new Sprite();

        public function Document() {
            test.graphics.beginFill(0x000000);
            test.graphics.drawRect(0, stage.stageHeight/2, 2000, 6);
            test.graphics.endFill();

            test.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
            test.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

            addChild(rootMc);
            rootMc.addChild(test);
        }

        function mouseDownHandler(evt:MouseEvent):void {
            trace("mouseDownHandler");
            var sprite:Sprite = Sprite(evt.target);
            sprite.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
                    //Limit the drag to a horizontal rectangle
            sprite.startDrag(false, new Rectangle(0, sprite.y, 2000, 0));
        }

        function mouseUpHandler(evt:MouseEvent):void {
            trace("mouseUpHandler");
            var sprite:Sprite = Sprite(evt.target);
            sprite.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
            sprite.stopDrag();
        }

        private function mouseMoveHandler(evt:MouseEvent):void {
            trace("mouseMoveHandler");
            evt.updateAfterEvent();
        }
    }

}

問題は次のとおりです。

  1. ドラッグアンドドロップは、行を正確にクリックした場合にのみ機能します。上下にクリックできるスペースが欲しいのですが。ただし、線は1ピクセルではなく、垂直方向に移動してはなりません。今のところ、これを実装する方法がわかりません。
  2. 最初の問題に関連して:mouseUpHandlerは、カーソルがその行にある場合にのみ呼び出されます。ピクセル単位でもずれていて、マウスボタンを離すと、ドラッグが続行されます。次に、行に戻り、もう一度クリックして放します。マウスボタンをどこから離してもドラッグが止まるようにしたいと思います。または、マウスがステージを離れたとき。

これはおそらく経験不足です。この機能を処理するためにどの機能が存在するのかわかりません。だから私はここでそれについて尋ねています。同時に、コードに関するフィードバックを得るチャンスでもあります。

4

1 に答える 1

4

ドラッグアンドドロップに関する問題を特定するためのアドバイスを以下に示します。

問題1:黒い線の後ろに非表示のコンテナを作成するだけで、「テスト」ムービークリップが大きくなります。ただし、黒い線のみが表示されます。これは、黒い線を引く前に次のコードを追加することで実現できます。

test.graphics.beginFill(0xffffff,0); 
// white container with 0 alpha
test.graphics.drawRect(0, stage.stageHeight/2 - 10, 2000, 26); 
// start 10px before and end 10 px after
test.graphics.endFill();

問題2:「テスト」MovieClipではなく、ステージにMouseEvent.MOUSE_UPイベントリスナーを追加した方がよいでしょう。これを使用してください:

this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
于 2012-05-06T01:35:26.897 に答える