Flash拖拽問題通用解決程式碼(含as2和as3)
[全螢幕欣賞]AS 2.0版本
以下為《AS》原始碼
var target_array = [a_mc, b_mc, c_mc];
var to_where_obj = {};
var initial_position_obj = {};
var destination_array = [x1_mc, x2_mc, x3_mc];
var is_occupied_obj = {};
for (var i = 0; i < target_array.length; i++) {
var _mc = target_array[i];
initial_position_obj[_mc._name] = {_x:_mc._x, _y:_mc._y};
_mc.onPress = function()
{
delete is_occupied_obj[to_where_obj[this._name]];
delete to_where_obj[this._name];
this.startDrag();
this.onMouseMove = function()
{
updateAfterEvent();
};
};
_mc.onRelease = _mc.onReleaseOutside = function ()
{
var is_hit;
for (var i = 0; i < destination_array.length; i++) {
var _mc = destination_array[i];
if (!is_occupied_obj[_mc._name] && this.hitTest(_mc)) {
is_occupied_obj[_mc._name] = this;
to_where_obj[this._name] = _mc._name;
this._x = _mc._x;
this._y = _mc._y;
is_hit = true;
}
}
if (!is_hit) {
this._x = initial_position_obj[this._name]._x;
this._y = initial_position_obj[this._name]._y;
}
stopDrag();
delete this.onMouseMove;
};
}
AS 3.0版本
以下為《AS》原始碼
var target_array:Array = [a_mc, b_mc, c_mc];
var to_where_obj:Object = new Object();
var initial_position_obj:Object = new Object();
var destination_array:Array = [x1_mc, x2_mc, x3_mc];
var is_occupied_obj:Object = new Object();
for (var i:Number = 0; i < target_array.length; i++) {
var _mc = target_array[i];
initial_position_obj[_mc.name] = {x:_mc.x, y:_mc.y};
_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
_mc.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
_mc.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
function mouseDown(event:MouseEvent):void
{
var _mc = event.target;
delete is_occupied_obj[to_where_obj[_mc.name]];
delete to_where_obj[_mc.name];
_mc.startDrag();
}
function mouseReleased(event:MouseEvent):void
{
var is_hit:Boolean = false;
var des_mc:MovieClip = new MovieClip();
var tar_mc = event.target;
tar_mc.stopDrag();
for (var i:Number = 0; i < destination_array.length; i++) {
des_mc = destination_array[i];
if (!is_occupied_obj[des_mc.name] && tar_mc.hitTestObject(des_mc)) {
is_occupied_obj[des_mc.name] = tar_mc;
to_where_obj[tar_mc.name] = des_mc.name;
tar_mc.x = des_mc.x;
tar_mc.y = des_mc.y;
is_hit = true;
}
}
if (!is_hit) {
tar_mc.x = initial_position_obj[tar_mc.name].x;
tar_mc.y = initial_position_obj[tar_mc.name].y;
}
}
function mouseMoveHandler(event:MouseEvent):void
{
event.updateAfterEvent();
}
論壇開啟了防盜鏈,請點選瀏覽該FLASH檔案