Моя единственная идея состояла в том, чтобы проверить, что в методах рисования и акта каждого актера, но это будет означать преграды проверок в цикле.
Да, это будет непросто, и, прежде всего, ад для поддержания.
Теперь, когда я вхожу в местоположение, мой этап очищается, и новые Актеры привязаны.
Это ваша проблема в том, что вы не используете scene2D, так как это должно быть ИМХО. Я надеюсь, что вы заняты интенсивной архитектурой. & сеанс рефакторинга кода.
При вводе нового места, вы должны быть ввод нового этапа. Итак, сначала вы должны иметь несколько этапов:
class MainMenu extends Stage {
public MainMenu(){
// Add buttons to play or quit the game
}
}
class PointNClickStage extends Stage {
// Add stuff common to all point'n click stages such as an inventory display
}
class Island extends PointNClickStage {
public Island(){
// Add some palm trees and an hidden chest
}
}
class PirateShip extends PointNClickStage {
public PirateShip(){
// Add some pirates and their ship
}
}
... etc
Тогда в вашем приложении слушателем, вы должны реализовать способ изменения текущего каскада, оказаны. Концептуально это часто называют «режиссером сцены/сцены». Некоторые основанные на сценах фреймворки, такие как Cocos2D, имеют собственный режиссер сцены, но libgdx в настоящее время отсутствует. Таким образом, вы должны реализовать этот механизм на себя и здесь очень простой пример, чтобы помочь вам получить его суть:
public MyApp extends ApplicationAdapter {
private Stage currentStage;
private static MyApp instance;
// ...
@Override
public void create() {
instance = this;
MyApp.setStage(new MainMenu()); // The game begins in the main menu
}
@Override
public void render() {
Gdx.gl.glClearColor(0.15f, 0.1f, 0.15f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
currentStage.act();
currentStage.draw();
}
public static void setStage(Stage stage){
instance.currentStage = stage;
Gdx.input.setInputProcessor(stage); // Important ;)
}
// ...
}
Так что, чтобы изменить местоположение (текущая стадия) у вас будет только сделать:
MyApp.setStage(new PirateShip())
Тогда, если вы не хотите, чтобы воссоздать на новом этапе каждый раз, когда вы меняете свое местоположение, вы можете инициализировать и сохранить ссылку на них где-то так, что вы будете в состоянии изменить положение, как, что для пример.
MyApp.setStage(some_list_containing_initialized_stage.get(id))
Кроме того, вы также можете посмотреть в этот libgdx extension, что обеспечивает scene2d Utils классов, такие как директор сцены и переходы, которые могут быть полезны для вас, если вы не хотите, чтобы изобрести колесо позже.
спасибо. Этого больше, чем достаточно, чтобы заставить меня идти. Я новый, что я неправильно использовал Scene2d, теперь я знаю почему. Еще раз спасибо!!! – gonnog
Рад помочь :) – Khopa