Как мне временно заставить актера переместиться на передний план в LibGDX scene2d? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть инвентарный интерфейс, который представляет собой таблицу в scene2d. Тогда на столе была куча Контейнеров, которые в основном являются ячейками инвентаря. У них прозрачный серый цвет фона. Затем в каждом контейнере есть ItemStack с изображением предмета и размером в стопку. Когда я перетаскиваю этот ItemStack поверх контейнера, который был создан позже, он перемещается за контейнером, и прозрачный серый фон будет перед изображением элемента. Как временно (или навсегда) переместить его на передний план, чтобы не имело значения, перед каким контейнером я перетаскиваю элемент?

Пример того, что происходит: https://i.imgur.com/yq4njex.gifv

Вот как я создаю контейнеры:

// Create inventory slots
table.row();
inventorySlots.clear();
for (int i = 0; i < inventory.getInventorySize(); i++) {
    if (i % SLOTS_PER_ROW == 0) table.row();

    Container cont = new Container();
    cont.fill();
    cont.background(Utils.createDrawable(1, 1, new Color(0, 0, 0, 0.4f)));

    inventorySlots.add(cont);
    table.add(cont).prefHeight(50).prefWidth(50).pad(5);
}

После этого я добавляю каждый ItemStack в список контейнеров / инвентарных слотов, как это:

// Add ItemStacks from Items to their respective slot
ArrayList<Item> items = inventory.getItems();
for(Container slot : inventorySlots) {
    Item item = items.get(inventorySlots.indexOf(slot));

    if(item != null) {
        ItemStack itemStack = new ItemStack(item);
        addInventoryEvent(itemStack, items);
        slot.pad(5);
        slot.setActor(itemStack);
    }
}

1 Ответ

3 голосов
/ 03 апреля 2020

Вы можете использовать Actor.setZindex() для перемещения перетаскиваемого актера на передний план.

Устанавливает z-индекс этого актера. Z-индекс - это индекс дочерних элементов родителя, где более низкий индекс ниже более высокого индекса. Установка z-index выше, чем количество детей, переместит ребенка вперед. Установка z-индекса меньше нуля недопустима

Решение может быть

image.addListener(new InputListener(){
    @Override
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        image.setZIndex(stage.getActors().size);
        return true;
    }
});

enter image description here

...