2007/11/08 | 代码模拟 startDrag() 函数
类别(Flash学习笔记) | 评论(1) | 阅读(340) | 发表于 15:21

  写代码时需到一个问题,在 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);
  }
 }
};

0

评论Comments