我正在做一个我正在做的项目的非常简单的第一步:记忆时间线。基本上,上面列出了年份的时间表。这是一条线,您应该能够将其水平移动以转到您选择的年份,然后添加事件和信息。
现在,我正在尝试实现那条线,我想它必须是无限宽的,以及拖放功能。
我有一些工作,但它被窃听了,我不知道出了什么问题。我对Flash没有那么有经验,所以我在这里问。
这是代码。舞台是空的,时间线上没有代码。仅此一个 Document 类,从 Properties 创建:
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();
}
}
}
问题是:
- 拖放仅在我完全单击该行时才有效。我希望上面和下面有一些空间,我也可以点击。但这条线绝对不能垂直移动,不能移动一个像素。我现在不知道如何实现这一点。
- 与第一个问题相关:只有当我的光标在线时才会调用 mouseUpHandler。如果它偏离了一个像素并且我松开鼠标按钮,拖动将继续。然后我必须回到线路上,再次单击并放手。我想做到这一点,以便无论我在哪里放开鼠标按钮,拖动都会停止。或者当鼠标离开舞台时。
这可能只是缺乏经验。我不知道存在哪些功能来处理此功能。所以我在这里问这个问题。同时,也有机会获得有关代码的一些反馈。