我使用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)我验证了表位于正确的位置。所以...我真的不知道发生了什么。
答案 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);}});