2015-07-17 10 views
0

Я реализую перетаскивание в Libgdx с помощью класса DragAndDrop. Актеры, которых мне нужно переместить, находятся в сетке (Таблица), в центре экрана.dragStart запускается в неправильном положении

Перетаскивание начинается, если я нажимаю в правом верхнем углу экрана, а не если я нажимаю на самого актера! Я не могу понять, где проблема.

Эта сетка представляет собой матрицу:

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, row) и y (j, column) в матрице. Объект Actor удерживает слот и вычисляет его положение на экране с помощью приведенных выше формул.

Другой вопрос: что такое float x и float y в методе dragStart?

UPDATE

Правильная формула у есть:

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

Но dragStart до сих пор не работает. Это совершенно не соответствует фазе. Перетаскивание не начинается, когда я нажимаю на актера, но если я нажму на область в правом верхнем углу экрана.

ОБНОВЛЕНИЕ 2

Проблема заключается в том позиционирование табл. Это полностью перепутано.

UPDATE 3

С table.setDebug (истинного) я проверил, что таблица находится в правильном положении. Итак ... я действительно не знаю, что происходит.

ответ

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);}}); 
Смежные вопросы