写代码时需到一个问题,在 onMouseMove 中写入的 startDrag() 函数是无效的。为了简单的实现鼠标拖拽而不改变现有的结构,我用下面的代码模拟了鼠标拖拽。
box.onPress = function() {
canMove = true;
dx = this._parent._xmouse - this._x;
dy = this._parent._ymouse - this._y;
};
box.onMouseMove = function() {
if (canMove) {
this._x = _root._xmouse - dx;
this._y = _root._ymouse - dy;
updateAfterEvent();
}
};
box.onRelease = function() {
canMove = false;
};
场景中建一个 box 元件,用 dx 和 dy 记录鼠标点击位置与元件坐标位置的差值,当鼠标移动时让元件进行“跟进”,每次“跟进”后,立即刷新显示,拖拽就会比较的流畅。有了这个结构,事件处理时就可以更细分了,比如可以区分出拖拽和点击,两种操作,发生过移动的是拖拽操作,不发生移动的是点击操作。
下面对代码进行变化,加入一个是否发生移动的判断 isMoved,可以同时保持拖拽和点击操作。请尝试点击盒子,并拖动它。
var canMove, isMoved:Boolean;
var dx, dy:Number;
box.stop();
box.onPress = function() {
canMove = true;
dx = this._parent._xmouse - this._x;
dy = this._parent._ymouse - this._y;
isMoved = false;
};
box.onMouseMove = function() {
if (canMove) {
this._x = _root._xmouse - dx;
this._y = _root._ymouse - dy;
updateAfterEvent();
isMoved = true;
}
};
box.onRelease = function() {
canMove = false;
if (!isMoved) {
if (this._currentframe == 1) {
this.gotoAndStop(2);
} else {
this.gotoAndStop(1);
}
}
};