我正在做一个非常简单的项目第一步:我正在做的事情:记忆时间表。基本上,列出了多年的时间表。这是一条线,您应该能够横向移动到您选择的年份,然后添加事件和信息。
现在,我正试图实现那条线,我认为它必须是无限宽的,以及拖放功能。
我有一些工作,但它有问题但我不知道出了什么问题。我没有经验丰富的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();
}
}
}
问题是:
这可能只是缺乏经验。我不知道有哪些功能可以处理这个功能。所以我在这里问这个问题。与此同时,它有机会获得有关代码的一些反馈。
答案 0 :(得分:4)
以下是我的建议,以指出你在拖拉机方面遇到的问题。下降。
问题1: 只需在黑线后面创建一个隐形容器,以便'test'MovieClip变大。但只有黑线才会可见。您可以通过在绘制黑线之前添加以下代码来完成此操作:
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: 如果将MouseEvent.MOUSE_UP eventlistener添加到舞台而不是'test'MovieClip会更好。只需使用:
this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);