你的問題的答案是肯定的,不是。這是因爲Scene2d API是圍繞使用SpriteBatch設計的,它設置了父代和子代演員之間的各種轉換信息。
如果您正在使用SpriteBatch(即繪製紋理等),那麼應用於父項的yes操作也會影響子項。有一些演員,如果我沒記錯的幾個例外,但我認爲這只是有事情喜歡的顏色做,等
如果不使用SpriteBatch(即直接與OpenGL繪圖的幾何形狀,或在Scene2d API提供的內容之外的自定義繪圖操作(如網格)),那麼不會有任何操作影響孩子。您必須編寫自己的代碼才能完成此任務,方法是對Scene2d進行子類化或爲自己創建簡單的內容。我知道這不是有史以來最好的事情,但'Libgdx嘗試不成爲'最終,全部'解決方案'。
如何變換工作的'魔術'位於組(link to source)。組類使用一個名爲drawChildren()的方法遍歷子元素並基於轉換後的SpriteBatch繪製它們。轉換髮生在Group類的draw()方法中。
沒有一些示例代碼,這不是一個真正的答案,我會假設你知道如何設置皮膚。下面的程序的最終結果是組按鈕將在50,100和Hello按鈕將在100,50。注意我沒有對Group按鈕做任何直接的修改,但是我把它放在一個組裏,並且翻譯了整個組。
public class Groups implements ApplicationListener {
private Stage stage;
private Skin uiSkin;
@Override public void create() {
this.stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
Gdx.input.setInputProcessor(this.stage);
this.uiSkin = new Skin(Gdx.files.internal("skin/uiskin.json"));
final TextButton plainTextButton = new TextButton("Hello", this.uiSkin);
this.stage.addActor(plainTextButton);
final Group group = new Group();
final TextButton groupTextButton = new TextButton("Group", this.uiSkin);
group.addActor(groupTextButton);
this.stage.addActor(group);
plainTextButton.addAction(Actions.moveBy(100, 50));
group.addAction(Actions.moveBy(50, 100));
Gdx.gl20.glClearColor(0f, 0f, 0f, 1);
Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
}
@Override public void render() {
this.stage.act();
Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
this.stage.draw();
}
@Override public void dispose() {}
@Override public void resize(final int width, final int height) {}
@Override public void pause() {}
@Override public void resume() {}
}
希望這會給你足夠的信息和關於Scene2d的一些解釋。
我想你需要重寫你的例子中的'addAction'方法。據我所知,沒有一個功能可以爲你的所有「組」添加一個「action」。也許這是一個很好的提到添加到系統?! – BennX 2013-05-05 12:21:37