2014-01-18 3 views
4

Как получить актера по имени в libgdx?Получить актера по имени в 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); 
     } 
    }; 

Актер, который выше, является актером, который был затронут. Как только этот конкретный актер был затронут, мне нужно изменить цвет другого актера. Как именно я собираюсь получить этого актера по его названию?

ответ

3

Прежде всего, необходимо установить имя для актера: (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; 
    } 
} 

Но было бы проще и более совершенным, если вы сохранили ссылку на всех своих Актеров и использовали его вместо этого.

15

Я хотел бы указать, что существует уже метод, который находит Actor по названию.

Он работает следующим образом: stage.getRoot().findActor(name).

Не нужно выполнять его самостоятельно. :)

+1

Каждый раз, когда я забываю об этом и помню правильные условия поиска, чтобы снова найти этот вопрос, мне грустно, что это не было отмечено как ответ. Спасибо! –

1

Я бы рекомендовал использовать уже предоставленные функциональные возможности группы. Каждый этап имеет группу корней, и это реализует поиск актера по имени. Код для этого более безопасен, чем заданный внутри ответа, если вы используете систему группировки.

Код группы выглядит так и более безопасен, так как он также просматривает группу, если вы добавляете группу на сцену.

/** 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; 
    } 

Link to Group Class

Если вам нужно искать много времени провести refrence актера. Если не просто использовать метод «ИЗОБРАЖЕНИЕ».

+1

Я не думаю, что это более безопасно, потому что 'stage.getActors()' также должен содержать * all * players. Итерация через этот список может быть даже более результативной. Но я все равно поеду с уже существующим API. Я просто не понимаю, как ваш ответ содержит какое-либо значение для двух ответов, которые уже были указаны ранее. – noone

Смежные вопросы