Libgdx在多个图像上使用单击侦听器(循环)

时间:2018-08-25 19:48:20

标签: java arrays libgdx clicklistener

我想知道是否有一种方法可以使用分组在一起的单击侦听器设置多个图像。我有这个图像数组,我尝试为每个循环使用增强功能,但是没有用。我试图在数组中的所有图像上设置单击侦听器,而不用单击侦听器单独设置数组的每个成员。

编辑

public  void Player1() {
    deck.displayHand();

    stage = new Stage(new ScreenViewport());

    group.addActor(deck.hand.get(0));
    deck.hand.get(0).setPosition(200,0);
    deck.hand.get(0).setTouchable(Touchable.enabled);

    group.addActor(deck.hand.get(1));
    deck.hand.get(1).setPosition(220,0);
    deck.hand.get(1).setTouchable(Touchable.enabled);

    group.addActor(deck.hand.get(2));
    deck.hand.get(2).setPosition(240,0);
    deck.hand.get(2).setTouchable(Touchable.enabled);

 stage.addActor(group);

    rand = (int) (Math.random() * (deck.hand.size));

    for (int z = 0; z<deck.hand.size; z++){
        final int finalZ = z;
        deck.hand.get(z).addListener(new ClickListener(){
            @Override
            public void clicked(InputEvent event, float x, float y) {
                deck.hand.get(finalZ).addAction(Actions.moveTo(300,400));
            }
        });
    }


}

@Override
public void draw(Batch batch, float parentAlpha) {
    Gdx.input.setInputProcessor(stage);
    stage.act();
    stage.draw();
}}

我是否必须为每个循环使用增强功能?是否可以使用其他循环?目的是让用户单击/触摸其中一张图像,然后将其转到屏幕的一个位置,对于单击或触摸的每个图像,它将均将其转到屏幕上的一个位置。

1 个答案:

答案 0 :(得分:0)

如果这有点令人困惑,则可以使用一个计数器,该计数器以每个图像的大小递增,并将其作为位置。这没什么意义,所以在这里:

// Fill array with each image in it's grid position e.g. the bottom left image would go at (0, 0) in the array.
Image[][] array = new Image[cols][rows];

// All the images have to be the same size but not necessarily square.
imageWidth = 100;
imageHeight = 100;

for(int y = 0; y < array.length; y++) {
    for(int x = 0; x < array[0].length; x++) {
        Image img = array[y][x];
        img.addListener(new ClickListener(){
            @Override
            public void clicked(InputEvent event, float x, float y) {
                img.addAction(Actions.moveTo(x * imageWidth + initialXOffset, y * imageHeight + initialYOffset));
            }
        });
    }
}

这仅在图像尺寸相同时有效。