libgdx-ClickListener不受演员比例的影响?
这是我制作的一个卡片类的构造函数。当我创建一个缩放并单击它时,实际上只注册1.0x缩放区域内的单击。i、 e.如果我通过1.5的比例,点击边界就不起作用。为什么不呢?我已经把演员的身躯放大了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
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);
如果您在运行时不手动更改
卡
缩放(仅在创建过程中设置),它应该可以正常工作。BasicActor
类可能缺少一些功能,包括正确的缩放处理。如果您只想显示一些图像(根据您使用的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来说仍然是新手,但我想我明白你的意思了。这对我来说并不是一个问题,因为现在我的卡片类作为演员的唯一用途就是可以点击它。稍后我肯定会用一些实际的行动,我会以艰难的方式发现你在说什么。也谢谢大家的推荐。总的来说,我最初认为精灵可能是更好的选择,因为它会给我更多的控制权,但事实并非如此