libgdx - ClickListener不受actor规模的影响?

时间:2016-01-17 21:57:52

标签: libgdx sprite actor clicklistener

这是我正在制作卡片类的构造函数。当我创建一个缩放并单击它时,实际只注册了1.0x缩放区域内的点击。即如果我按比例传递1.5,那么点击边框就不起作用了。为什么不?我已经扩展了演员本身。

public Card(float x, float y, float scale)
{
    this.setPosition(x, y);

    faceSprite = new Sprite(MyResources.getInstance().cardTextureRegion);
    faceSprite.setPosition(x, y);
    faceSprite.setScale(scale);

    borderSprite = new Sprite(MyResources.getInstance().cardBorderTextureRegion);
    borderSprite.setPosition(x, y);
    borderSprite.setScale(scale);

    // Set boundaries for ourselves (the actor).  Note that we have to match the scale of the sprites.
    setSize(borderSprite.getWidth(), borderSprite.getHeight());
    setScale(scale);

    // Add ClickListener
    final Card thisCard = this;
    addListener(new ClickListener() {
        public void clicked(InputEvent event, float x, float y) {
            ((MyStage)(thisCard.getStage())).cardClicked(thisCard);
        }
    });

}

2 个答案:

答案 0 :(得分:1)

基本Actor类可能缺少某些功能,包括适当的比例处理。如果您只想显示一些图像(根据您使用的Sprite对象判断),我建议使用现有的类而不是自定义actor - 特别是因为您可能无法正确渲染Sprites Actor参数,如果您使用大量自定义操作。

Image允许您显示“精灵” - 尽管有些简化,但它应该足够了。要存储图像,您可以使用Table(更灵活)或Stack(可以使用相同尺寸的多张图片)。

如果您真的想坚持使用自定义actor方法,请尝试使用此方法而不是更改比例:

setSize(borderSprite.getWidth() * scale, borderSprite.getHeight() * scale);

如果你没有在运行时手动更改Card比例(仅在创建期间进行设置),它应该可以正常工作。

答案 1 :(得分:1)

您可以使用图像类来显示图像。

Texture texture=new Texture("test.jpg");
Image image=new Image(texture);

//您可以根据需要使用setsize()或setBounds()。

image.setScale(scale);

image.addListener(new ClickListener(){
     @Override
    public void clicked(InputEvent event, float x, float y) {

     ((MyStage)(thisCard.getStage())).cardClicked(event.getTarget());
     } 
  });