如何在libgdx中按名称获取演员?
我目前有以下ChangeListener:
ChangeListener colorPickerListener = new ChangeListener()
{
public void changed(ChangeEvent event, Actor actor)
{
//Popup Window
toolboxStage.addActor(blockWindow);
//toolboxStage.getRoot().removeActor(blockWindow);
Gdx.app.log("LevelEditorScreen", "Color Picker Selected");
Gdx.app.log("LevelEditorScreen", "HUD Width: " + HUD_WIDTH);
Gdx.input.setInputProcessor(toolboxStage);
}
};
上面的演员是被触摸过的演员。一旦触及这个特定的演员,我需要改变另一个演员的颜色。我究竟该如何以名字命名这位演员呢?
答案 0 :(得分:16)
我想指出已有一种方法可以按名称查找Actor
。
它的工作方式如下:stage.getRoot().findActor(name)
。
无需亲自实施。 :)
答案 1 :(得分:3)
首先,您需要为您的Actor设置一个名称:(Actor#setName)
myactor.setName("myactor");
然后你可以得到舞台上的所有演员,如下所示:(Stage#getActors)
Array<Actor> stageActors = mystage.getActors();
然后,您可以使用Actor#getName检查该名称的所有Actors:
int len = stageActors.size;
for(i=0; i<len; i++){
Actor a = stageActors.get(i);
if(a.getName().equals("myactor")){
//a is your Actor!
break;
}
}
但是,如果您保留对所有演员的引用并使用它,那么它将更容易和更高性能。
答案 2 :(得分:1)
我会重新使用已经给定的集团功能。每个Stage都有一个根组,这实现了按名称查找actor。如果您使用分组系统,它的代码比答案中给定的内部更安全。
该组的代码看起来像这样,并且更安全,因为如果您向舞台添加一个组,它也会查看组内部。
/** Returns the first actor found with the specified name. Note this recursively compares the name of every actor in the group. */
public Actor findActor (String name) {
Array<Actor> children = this.children;
for (int i = 0, n = children.size; i < n; i++)
if (name.equals(children.get(i).getName())) return children.get(i);
for (int i = 0, n = children.size; i < n; i++) {
Actor child = children.get(i);
if (child instanceof Group) {
Actor actor = ((Group)child).findActor(name);
if (actor != null) return actor;
}
}
return null;
}
如果您需要多次搜索以保持对Actor的尊重。如果不只是使用serch方法。