2015-03-12 3 views
1

Я хочу сделать спаривание путем перетаскивания. Предполагается, что три предмета будут перемещаться по соответствующим другим трем предметам на сцене. Однако я могу предсказать, что добавление детей динамически меняет все индексы (z/depth/что угодно). Поэтому, когда «случайно» кто-то нависает над совпадающей парой, мышь будет над предметом, но тащит один за спиной. В то время «падение», возможно, испортит программу.AS3 Перетаскивание

Есть ли способ избежать этой ситуации? Любая помощь будет очень признательна.

ответ

0

Вы должны установить перетаскиванием объекта, прежде всего:

Sprite(draggingObject.parent).setChildIndex(draggingObject, Sprite(draggingObject.parent).numChildren - 1); 

также вы должны слушать MOUSE_UP событие на значение стадии.

Практический пример:

import flash.display.Sprite; 
import flash.events.MouseEvent; 

var container:Sprite = new Sprite(); 
var dragged:Sprite; 
addChild(container); 
var card:Sprite; 
for (var j:uint = 0; j < 10; j++) { 
    card = new Sprite(); 
    container.addChild(card); 
    card.buttonMode = true; 
    card.graphics.beginFill(0x000000); 
    card.graphics.drawRect(0,0,30,30); 
    card.x = j*40; 
    card.addEventListener(MouseEvent.MOUSE_DOWN, stardDragListener); 
} 
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragEvent); 
function stardDragListener(e:MouseEvent):void { 
    dragged = Sprite(e.currentTarget); 
    Sprite(dragged.parent).setChildIndex(dragged, Sprite(dragged.parent).numChildren - 1) 
    dragged.startDrag(); 
} 
function stopDragEvent(e:MouseEvent):void { 
    if (dragged) dragged.stopDrag(); 
} 
+0

Это очень возможно бросить «Переданный индекс выходит за пределы границ», так как перетаскивание объект может быть первым в индексе. – coner

+0

Вы устанавливаете numChildren - 1 или numChildren? –

+0

Есть ли способ, которым мы можем постоянно изменять индекс? Как если бы другой объект был добавлен к индексу изменения смены прежнего ... @ fresh-flash было минус 1 – coner

Смежные вопросы