dragStart从错误的位置开始

时间:2015-07-17 21:03:21

标签: drag-and-drop libgdx

我使用DragAndDrop类在Libgdx中实现拖放。 我必须移动的角色位于网格(表格)中,以屏幕为中心。

如果我单击屏幕的右上角,则拖放开始,而不是如果我点击演员本身!我无法弄清问题在哪里。

这个网格是一个矩阵:

for(int i = 0; i < Constants.ROWS; i++) {
        for(int j = 0; j < Constants.COLS; j++) {
            slots[i][j] = new Slot(Item.EMPTY, i, j);
        }
    }

然后我使用上面的代码创建表:

public class SlotsAreaActor extends Table {

    public SlotsAreaActor(SlotsArea slotsArea, DragAndDrop dnd) {

        // set the position of this actor in the screen
        setPosition(Constants.SLOTS_AREA_ACTOR_X, Constants.SLOTS_AREA_ACTOR_Y);
        // spaces all the row and the columns
        defaults().space(Constants.ROWS_SPACE);
        row().fill().expandX();

        Slot[][] slots = slotsArea.getSlots();
        for(int i = 0; i < slots.length; i++) {
            for(int j = 0; j < slots[0].length; j++) {
                SlotActor slotActor = new SlotActor(slots[i][j]);
                dnd.addSource(new SlotSource(slotActor));
                dnd.addTarget(new SlotTarget(slotActor));
                add(slotActor);
            }

            row();
        }
    }
}

在SlotActor类中,我设置了边界:

x = Constants.APP_WIDTH - Constants.ORIZONTAL_OFFSET - (Constants.TILE_SIZE * (Constants.COLS - slot.getX()));
    y = Constants.APP_HEIGHT - Constants.VERTICAL_OFFSET - (Constants.TILE_SIZE * (Constants.ROWS - slot.getY()));
setBounds(x, y, Constants.TILE_SIZE, Constants.TILE_SIZE);

我的公式错了...

Slot对象在矩阵中保持其x(i,行),在矩阵中保持y(j,列)。 Actor对象保存槽,并使用上面的公式计算它在屏幕中的位置。

另一个问题:dragStart方法中的float x和float y是什么?

更新

y的正确公式为:

y = Constants.APP_HEIGHT - Constants.VERTICAL_OFFSET - (Constants.TILE_SIZE * slot.getX());

但是,dragStart仍然不起作用。它完全不同步。 当我点击演员时,拖动不会开始,但如果我点击屏幕右上角的某个区域。

更新2

问题在于表的定位。这完全搞砸了。

更新3

使用table.setDebug(true)我验证了表位于正确的位置。所以...我真的不知道发生了什么。

1 个答案:

答案 0 :(得分:0)

对于拖放我实现如下:

myActor.addListener(new DragListener(){
public void touchDragged(InputEvent event, float x, float y, int pointer){
myActor.moveBy(x-firstItem.getWidth()/2,y-firstItem.getHeight()/2);}});