[英]Get an actor by name in libgdx
如何在libgdx中按名稱獲取actor?
我目前有以下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);
}
};
上面的演員是被觸摸的演員。 一旦觸及這個特定的演員,我需要改變另一個演員的顏色。 我究竟該如何以名字命名這位演員?
我想指出已經有一種方法可以通過名稱找到一個Actor
。
它的工作方式如下: stage.getRoot().findActor(name)
。
無需自己實施。 :)
首先,您需要為Actor設置一個名稱:( Actor#setName )
myactor.setName("myactor");
然后你就可以得到舞台上的所有Actors,如下所示:( 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;
}
}
但是,如果您保留對所有Actors的引用並使用它,那么它將更容易 , 更高效。
我會重新使用已經給定的集團功能。 每個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方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.