只拖放Actor Libgdx底部的触发器

时间:2017-04-03 08:59:27

标签: java libgdx drag-and-drop scene2d

我有一个表,在每个单元格中包含另一个表。例如,该表可以包含8个其他表。我添加了拖放功能,因此我可以拖动较小的表格。它有效,但只是部分。如果我触摸较小的表的底部,则仅检测到拖放,如果我触摸它们的中间或顶部,则不会触发拖放。我试图设置较小的表的宽度和高度,然后拖放也从顶部的一个点触发,但仍然不是从它应该的任何地方?可能有什么不对?

我的代码: 在代码中,collectionTable是较大的表,TestCard是添加到collectionTable的较小表的类型。

dnd = new DragAndDrop();
dnd.setDragTime(50);
for (final Actor x : collectionTable.getChildren()) {
            TestCard y = (TestCard) x;
            y.setWidth(Gdx.graphics.getWidth() / (7 * scale));
            y.setHeight(Gdx.graphics.getHeight() / (3.3f * scale));
            dnd.addSource(new CardSource(y)); 
dnd.addTarget(new Target(selectedDeck);
//not adding the code from the target as it works as intended

    class CardSource extends Source {

        final Payload payload = new Payload();

        TestCard card;

        public CardSource(Actor actor) {
            super(actor);
        }

        public CardSource(TestCard card) {
            super(card);
            this.card = card;
            card.setWidth(Gdx.graphics.getWidth() / (7 * scale));
            card.setHeight(Gdx.graphics.getHeight() / (3.3f * scale));
        }

        public Payload dragStart(InputEvent event, float x, float y, int pointer) {
            payload.setObject(card.);
            payload.setDragActor(new TestCard(card));
            //payload.setInvalidDragActor(invalidActor);
            payload.setValidDragActor(new TestCard(card));
            return payload;
        }
    }

1 个答案:

答案 0 :(得分:0)

使用:setTouchabe(Touchable.enabled)

父表上的

。默认情况下,“组”(WidgetGroup或表)仅在按钮和标签等实际可见演员上注册触摸。