libgdx-ClickListener不受演员比例的影响?

libgdx-ClickListener不受演员比例的影响?,libgdx,sprite,actor,clicklistener,Libgdx,Sprite,Actor,Clicklistener,这是我制作的一个卡片类的构造函数。当我创建一个缩放并单击它时,实际上只注册1.0x缩放区域内的单击。i、 e.如果我通过1.5的比例,点击边界就不起作用。为什么不呢?我已经把演员的身躯放大了 public Card(float x, float y, float scale) { this.setPosition(x, y); faceSprite = new Sprite(MyResources.getInstance().cardTextureRegion); fa

这是我制作的一个卡片类的构造函数。当我创建一个缩放并单击它时,实际上只注册1.0x缩放区域内的单击。i、 e.如果我通过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);
        }
    });

}

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

Image
允许您显示“精灵”-虽然有点简化,但应该足够了。要存储图像,您可以使用
(更灵活)或
堆栈
(将处理相同大小的多个图像)

如果您确实想坚持使用自定义参与者方法,请尝试以下方法,而不是更改比例:

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

如果您在运行时不手动更改
缩放(仅在创建过程中设置),它应该可以正常工作。

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

Image
允许您显示“精灵”-虽然有点简化,但应该足够了。要存储图像,您可以使用
(更灵活)或
堆栈
(将处理相同大小的多个图像)

如果您确实想坚持使用自定义参与者方法,请尝试以下方法,而不是更改比例:

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

如果您在运行时不手动更改
缩放(仅在创建过程中设置),它应该可以正常工作。

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

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

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

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

谢谢我知道Image类,但计划扩展我的Card actor,使其不仅仅具有Image功能。最后,这可能仍然是一条路,但我想了解为什么演员没有按照我期望的方式工作。谢谢。我知道Image类,但计划扩展我的Card actor,使其不仅仅具有Image功能。最后,这可能仍然是一条路,但我想了解为什么演员没有按照我预期的方式工作。谢谢——我主要是想弄清楚为什么演员没有按照我预期的方式工作。实际上,我已经输入了您建议的setSize()版本,但感觉像是一个黑客。当您说“如果使用大量自定义操作,您可能无法使用精确的角色参数渲染精灵”时,您是什么意思?
Sprite
不是
Scene2D
API的一部分。基本上,您必须用旋转、原点等覆盖每个
Actor
setter,并调用
Sprite
方法。或者根据当前的
Actor
状态更新每个渲染上的
Sprite
状态。例如,如果要添加旋转或移动动作,
Sprite
将忽略
Actor
参数,除非您自己手动更新它们。对于已经实现的东西来说,这是大量额外的工作-只需使用
Image
类在
阶段
上显示和管理图像即可。如果需要将多个纹理显示为一个,请使用
Group
extensions中的一个。好的——对libgdx来说仍然是新手,但我想我明白你的意思了。这对我来说并不是一个问题,因为现在我的卡片类作为演员的唯一用途就是可以点击它。稍后我肯定会用一些实际的行动,我会以艰难的方式发现你在说什么。也谢谢大家的推荐。一般来说,我最初认为精灵可能是更好的选择,因为它会给我更多的控制,但我需要“更多控制”的少数原因之一是堆叠纹理,我应该知道其他地方也支持纹理。谢谢——我主要是想弄明白为什么演员的行为没有达到我的预期。实际上,我已经输入了您建议的setSize()版本,但感觉像是一个黑客。当您说“如果使用大量自定义操作,您可能无法使用精确的角色参数渲染精灵”时,您是什么意思?
Sprite
不是
Scene2D
API的一部分。基本上,您必须用旋转、原点等覆盖每个
Actor
setter,并调用
Sprite
方法。或者根据当前的
Actor
状态更新每个渲染上的
Sprite
状态。例如,如果要添加旋转或移动动作,
Sprite
将忽略
Actor
参数,除非您自己手动更新它们。对于已经实现的东西来说,这是大量额外的工作-只需使用
Image
类在
阶段
上显示和管理图像即可。如果需要将多个纹理显示为一个,请使用
Group
extensions中的一个。好的——对libgdx来说仍然是新手,但我想我明白你的意思了。这对我来说并不是一个问题,因为现在我的卡片类作为演员的唯一用途就是可以点击它。稍后我肯定会用一些实际的行动,我会以艰难的方式发现你在说什么。也谢谢大家的推荐。总的来说,我最初认为精灵可能是更好的选择,因为它会给我更多的控制权,但事实并非如此