QT开发中文网

var copiedClip:MovieClip = null; // 用于存储被复制的影片剪辑 var originalClip:MovieClip = null; // 用于存储原始影片剪辑 // 循环遍历9个影片剪辑 for (var i = 1; i

这段AS2代码的问题在于,当你复制一个影片剪辑并拖动它时,如果你单击鼠标右键以删除该复制,那么原始影片剪辑将会被删除而不是复制。

解决方法是:

  1. 更改onMouseDown事件处理程序:修改第二个if语句块中的代码,并使用duplicateMovieClip()函数创建新的副本来替换当前已删除的影片剪辑。具体地说,在这个else if块中,应该使用以下代码来创建新的副本:

    this.duplicateMovieClip(“tu” + i, this.getNextHighestDepth()); removeMovieClip(this);

  2. 将onPress事件处理程序更改为onMouseUp事件处理程序:由于AS2中startDrag()函数会导致该对象成为活动对象(也就是说,在鼠标左键按下后),因此建议将onPress事件处理程序更改为onMouseUp事件处理程序。这样,只有当鼠标左键释放时才会启动复制和拖动过程。

请参考以下修改后的代码:

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));  // 获取该对象在数组中的索引位置 
            this.duplicateMovieClip("tu" + i, this.getNextHighestDepth());  //创建新的副本替换当前已删除的对象 
            removeMovieClip(this);  
        }
    };
}

// 设置全局onMouseUp事件处理程序,停止拖动并放置复制后的图片
_global.onMouseUp = function() {
    if (copiedClip != null) {
        copiedClip.stopDrag(); // 停止拖动

        // 恢复全局onMouseMove事件处理程序为null
        _root.onMouseMove = null;

        // 将复制后的图片放置在当前鼠标位置,并清除对被复制的影片剪辑和原始影片剪辑的引用
        copiedClip._x = _root._xmouse;
        copiedClip._y = _root._ymouse;
        copiedClip.removeMovieClip();
        originalClip = null;
    }
};

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1448

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?