Ich mache ein Programm, um die erstaunliche libGDX
+ scene2d API und ich strukturiert es wie folgt:Ist es in LibGDX `scene2d` API möglich, die gleiche Actor Instanz in mehreren Stufen zu haben?
- ich eine einzelne Instanz
MyGame
haben, eine einzelne InstanzPolygonSpriteBatch
halten. - Es ist eine abstrakte
MyScreen
Klasse, eineMyStage
Klasse halten (siehe unten) - Dann gibt es viele verschiedene Bildschirme Klassen, die von
MyScreen
erbt, und instanziiert sie nach Belieben.
(in allen Fällen das Entfernen des „My
“ können Sie den Namen der jeweiligen Bibliotheksklasse gibt, dass es reicht)
Dieses Modell funktionierte gut, bis ich einige Probleme Aktionen zwischen den Bildschirmen auszuführen mit dem Action
System. Ich entschied dann, dass es eine gute Idee wäre, eine einzige OmnipresentActor
zu haben, die zu MyGame
gehört, die, wie der Name sagt, in jeder Szene vorhanden ist. So modifizierte ich myStage wie diese mehr oder weniger suchen:
public class MyStage extends Stage {
public MyStage(MyGame g) {
super(new FitViewport(MyGame.WIDTH, MyGame.HEIGHT), g.batch);
addActor(game.omnipresentInvisibleActor);
}
@Override
public void clear() {
unfocusAll();
getRoot().clearActions();
getRoot().clearListeners();
removeActorsButNotListenersNorActions();
}
public void removeActorsButNotListenersNorActions() {
for (Actor a : getActors()) if (a.getClass()!= OmnipresentInvisibleActor.class) a.remove();
}
es eine schmerzliche Debug-Phase gefolgt, bis ich folgendes herausgefunden:
public PresentationScreen(MyGame g) {
// super() call and other irrelevant/already debugged code
System.out.println("PRINT_BEFORE: "+ stage.getActors().toString()); // OmnipresentActor is there
mainMenuScreen = new MainMenuScreen(game);
System.out.println("PRINT_AFTER: "+ stage.getActors().toString()); // OmnipresentActor is not there anymore, but was added to the mainMenuScreen
die "PRINT_BEFORE"
Aussage zeigt, dass die stage
hält die omnipresentActor
. In "PRINT_AFTER"
ist es nicht mehr da, während mainMenuScreen
es tatsächlich hält. Also meine Frage, jetzt präziser:
verhindert scene2d das passiert, oder mache ich hier etwas falsch?
Antworten sehr geschätzt! Prost
Ein Schauspieler kann nur Mitglied einer Stufe sein. Aber Sie können es aus einem entfernen und es zu einem anderen hinzufügen, oder haben Sie eine omnipräsente Bühne für diesen Akteur, die nach jedem Bildschirm der jeweiligen Bühne gezeichnet wird. Ich nehme an, du könntest eine Nachfolge-Schauspieler-Klasse schreiben, die auf einen Schauspieler verweist, der sich in einer anderen Stufe befindet und zu seiner Zeichenmethode aufruft. – Tenfour04
Ja, das dachte ich mir ... Ich werde den Ansatz dann ändern, kann ich mir nicht vorstellen dass die Bibliotheken ein solches Design fördern. Vielleicht kann mir das helfen: http://stackoverflow.com/a/28024327/4511978 Aber das ist eine andere Frage –