为啥 Libgdx 的 Table 不接受缩放动作?

Posted

技术标签:

【中文标题】为啥 Libgdx 的 Table 不接受缩放动作?【英文标题】:Why Libgdx's Table does not accept scale action?为什么 Libgdx 的 Table 不接受缩放动作? 【发布时间】:2012-10-23 11:31:04 【问题描述】:

我正在使用 libgdx 库中的 scene2d 在我的游戏中创建一些 UI。

我使用了一个表格,我想在用户触摸时采取一些缩放操作以使按钮具有触摸感。

当我使用任何其他“Actor”类型(如 Group)并为其提供缩放动作时,它可以工作,但不能使用 Table。

这是我的表定义:

Table table = new Table();
table.setSize(width, height);
table.setPosition(x, y);
table.setOrigin(width/2, height/2);
table.add(new Label(...));
table.row();
...

在我的 touchDown 事件中,我给它一个缩放动作:

table.addAction(Actions.scaleTo(0.8f, 0.8f, 0.1f));

在 touchUp 中,我给它另一个动作以获得原始比例:

table.addAction(Actions.scaleTo(1f, 1f, 0.1f));

正如我所说,此代码适用于其他类型的 Actor,例如 Image 和 Group。 有什么想法为什么不适用于 Table?

【问题讨论】:

【参考方案1】:

回答我自己的问题:

为了 libGdx 的文档 (https://code.google.com/p/libgdx/wiki/scene2dui#Rotation_and_scale),如果设置了背景,表不支持缩放和旋转。

如果我们想要缩放和/或旋转表格,我们必须像下面的代码一样:

TextButton button = new TextButton("Text Button", skin);
Table wrapper = new Table();
wrapper.add(button);
wrapper.setTransform(true);
wrapper.setOrigin(wrapper.getPrefWidth() / 2, wrapper.getPrefHeight() / 2);
wrapper.setRotation(45);
wrapper.setScaleX(1.5f);

【讨论】:

在最新版本的库 (0.9.8) 中似乎缺少setTransform,但您可以改为调用setClip(true),它可以将转换作为副作用。 @Nick - setTransform 在 0.9.8 下仍然存在。是Grouplibgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/…的方法 为我工作,谢谢! 设置 setTransform(true) 为我固定了桌子上的刻度。医生撒谎!他们说默认情况下这是真的,但它不适合我:)

以上是关于为啥 Libgdx 的 Table 不接受缩放动作?的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx之Table 表格排版

在 LibGDX 中缩放位图字体

Libgdx 未缩放全屏

Libgdx - 为啥 Bullet 和 FreeType 与 HTML 不兼容?

我想缩放 ParticleEffect - Libgdx

如何根据屏幕分辨率缩放 libgdx 中的精灵?