0

我有Flash遊戲寫在ActionScript 3,這裏有4個項目應該被拖動到特定的領域,它正常工作時拖動項目任何領域(如果正確的領域 - 項目得到領域的x,y職位,如果領域是錯誤的 - 項目返回到他的固定位置)。ActionScript 3.拖放遊戲出錯

當我試圖將物品放在其他物品上時(例如試圖在Item2上拖放Item1),它們會出錯,它們會改變位置。如果我拖Item1,它不hitTestObject正確的字段應該回到Items1的位置,但它要Item2xy位置和Item2到項目1 xy位置。

我用下面的代碼:

private function getPosition(target:Object):void 
{ 
    xPos = target.x; 
    yPos = target.y; 
} 
private function dragObject(e:MouseEvent):void 
{ 
    getPosition(e.target); 
    e.target.startDrag(); 
    trace("Started drag"); 
} 
private function stopDragObject(e:MouseEvent):void 
{ 
    if (e.target.hitTestObject(e.currentTarget.parent[field])) { 
     e.target.x = (e.currentTarget.parent[field]).x; 
     e.target.y = (e.currentTarget.parent[field]).y; 
    } else { 
     e.target.x = xPos; //here is part where item get's back to his position 
     e.target.y = yPos; //seems that here is problem 
    } 
} 

回答

1

我覺得這是一個深度的問題你的項目(索引位置),因爲,例如,當你在一個又一個具有深度1拖動項目與索引5,您的MouseEvent.MOUSE_UP事件的目標將成爲第二個對象,而不是第一個,所以我認爲你可以通過設置您當前項目的索引作爲您的項目容器中的最高像這樣避免:

function dragObject(e:MouseEvent):void { 

    var container:DisplayObjectContainer = DisplayObjectContainer(e.target.parent); 
     container.setChildIndex(DisplayObject(e.target), container.numChildren - 1); 

    // other instructions 

} 

編輯:

爲避免你的第二個問題(定位MouseEvent.MOUSE_UP事件的目標(0,0)或最後拖動的對象下),你可以使用一個布爾值VAR來表示,如果你拖動某一項或不:

var is_dragging:Boolean = false; 

function dragObject(e:MouseEvent):void 
{ 
    is_dragging = true; 

    // other instructions 
} 
function stopDragObject(e:MouseEvent):void 
{ 
    if(!is_dragging) return; 

    // other instructions 

    is_dragging = false;  
} 

布爾VAR只是一個方式,你也可以初始化xPosyPos,...

注:要重現該問題,您可以點擊任意位置上你的舞臺,釋放你的鼠標在一件物品上,t他的物品將被定位在(0,0),因爲xPosyPos未定義,但是如果您已經拖動了其他物品,該物品將被定位在(xPos,yPos),因此位於您上次拖動的物品下方。

希望能有所幫助。

+0

謝謝,它有幫助,但仍然存在這樣的錯誤:如果我開始快速點擊並拖動(任何位置)快速item1,稍後item2,稍後再item1,稍後item2並重復它,他們都會獲得1個位置在這個例子item1項目2(不像以前改變位置,但在另一個產生一個) – 2015-03-31 20:45:53

+0

@StanislovasKalašnikovas我編輯了我的答案。 – akmozo 2015-03-31 21:40:58

+0

Upvoted,在晚上我將能夠測試它,測試後如果它會工作,我會接受答案,讓你知道如果這對我有效。 – 2015-04-01 05:45:17