【问题标题】:Libgdx Using a click listener on multiple images (looping)Libgdx 在多个图像上使用点击监听器(循环)
【发布时间】:2018-08-25 19:48:19
【问题描述】:

我想知道有没有办法使用组合在一起的点击侦听器设置多个图像。我有这个图像数组,我尝试为每个循环使用增强的,但它没有用。我试图在数组中的所有图像上设置一个点击侦听器,而不用一个点击侦听器单独设置数组的每个成员。

编辑

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();
}}

我必须为每个循环使用增强型,还是可以使用不同的循环?目的是让用户点击/触摸其中一张图片,然后它会转到屏幕的一个位置,每点击/触摸一张图片,它就会转到屏幕上的一个位置。

【问题讨论】:

  • 为什么不起作用?您遇到异常或单击不起作用在这种情况下,您可能需要在更新方法中调用 stage.act() 并将阶段设置为输入处理器 Gdx.input.setInputProcessor(stage)
  • 我调用了 stage.act 并将我的舞台设置为我的输入处理器,但我仍然无法点击图像
  • 好吧,在您的代码中,您将图像设置在舞台上并给了它们ClickListener,所以据我所知还有其他事情发生,但我需要查看更多代码。跨度>

标签: java arrays libgdx clicklistener


【解决方案1】:

如果这有点像谜题,您可以使用一个计数器来增加每个图像的大小并将其作为位置。这没有什么意义,所以在这里:

// 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));
            }
        });
    }
}

这仅适用于图像大小相同的情况。

【讨论】:

  • 将概念想象为屏幕底部的食物(水果)图像(全部在 x 轴上对齐),而不是在我想要循环的每个水果上设置点击监听器点击监听器在水果数组上一次,所以当我想向数组添加不同的水果时,它会自动有一个点击监听器,并且水果数组的每个成员也会有一个点击监听器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多