私が行っているプロジェクトの非常に単純な最初のステップであるメモリタイムラインに取り組んでいます。基本的に、年が記載されたタイムライン。これは線であり、水平方向に移動して選択した年に移動し、イベントや情報を追加できるはずです。
今、私はその線を実装しようとしています。これは無限に広くなければならないと思いますが、ドラッグアンドドロップ機能もあります。
何かが機能していますが、バグがあり、何が問題になっているのかわかりません。私は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ピクセルではなく、垂直方向に移動してはなりません。今のところ、これを実装する方法がわかりません。
- 最初の問題に関連して:mouseUpHandlerは、カーソルがその行にある場合にのみ呼び出されます。ピクセル単位でもずれていて、マウスボタンを離すと、ドラッグが続行されます。次に、行に戻り、もう一度クリックして放します。マウスボタンをどこから離してもドラッグが止まるようにしたいと思います。または、マウスがステージを離れたとき。
これはおそらく経験不足です。この機能を処理するためにどの機能が存在するのかわかりません。だから私はここでそれについて尋ねています。同時に、コードに関するフィードバックを得るチャンスでもあります。