这段代码中有重复定义变量copiedClip的问题,应该去掉第二次的定义。同时,在将复制后的影片剪辑添加到舞台上时,应该把复制后的影片剪辑对象作为第一个参数传入attachMovie方法中。
修改后的代码如下所示:
var copiedClip: MovieClip = null; // 用于存储被复制的影片剪辑
var originalClip: MovieClip = null; // 用于存储原始影片剪辑
// 循环遍历9个影片剪辑
for (var i = 1; i <= 9; i++) {
var clip: MovieClip = this["tu" + i];
// 设置鼠标左键抬起事件处理程序
clip.onMouseUp = function() {
if (copiedClip == null) {
originalClip = this;
copiedClip = this.duplicateMovieClip("copy", this.getNextHighestDepth()); // 复制当前影片剪辑
copiedClip.startDrag(); // 开始拖动
// 设置全局onMouseMove事件处理程序,跟随鼠标移动
_root.onMouseMove = function() {
if (copiedClip != null) {
copiedClip._x = _root._xmouse;
copiedClip._y = _root._ymouse;
}
};
}
};
// 设置鼠标右键按下事件处理程序
clip.onMouseDown = function() {
if (copiedClip != null && this != originalClip) { // 如果当前有已复制的影片剪辑且不是原始影片剪辑
copiedClip.removeMovieClip(); // 删除已复制的影片剪辑
copiedClip = null;
} else if (copiedClip == null && this == originalClip) { // 如果当前没有已复制的影片剪辑且是原始影片剪辑
var i: Number = parseInt(this._name.substr(2)); // 获取该对象在数组中的索引位置
var newClip: MovieClip = this.duplicateMovieClip("tu" + i, this.getNextHighestDepth()); //创建新的副本替换当前已删除的对象
removeMovieClip(this);
originalClip = newClip;
}
};
}
// 设置全局onMouseDown事件处理程序,停止拖动并放置复制后的图片
_global.onMouseDown = function() {
if (copiedClip != null&& Key.isDown(Key.CONTROL)) {
copiedClip.stopDrag();// 停止拖动
// 恢复全局onMouseMove事件处理程序为null
_root.onMouseMove = null;
// 将复制后的图片放置在当前鼠标位置,并清除对被复制的影片剪辑和原始影片剪辑的引用
copiedClip._x = _root._xmouse;
copiedClip._y = _root._ymouse;
// 将复制后的影片剪辑添加到舞台上
var emptyMC:MovieClip = this.createEmptyMovieClip("empty_mc", this.getNextHighestDepth());
emptyMC.attachMovie(copiedClip, "copied_clip", emptyMC.getNextHighestDepth());
copiedClip = null;
originalClip = null;
trace("onMouseDown event triggered");
}
};