Rozszerzana plansza w grze

0

Witam. Mam oto taki problem. Piszę grę planszową i w pewnych momentach chciałbym móc rozszerzać planszę. Tzn powiedzmy najpierw startuje z rozmiarami 10x10m, a co jakiś czas może zdarzyć się sytuacja w które dodaję wiersz lub kolumnę do planszy i chciałbym odświeżyć wtedy widok. Korzystam z framework'a libgdx. Przyjmijmy na razie, że pola to "guziki". Mam więc coś takiego ( w uproszczeniu ) :

ArrayList<ArrayList<TextButton>> buttons;
Window window;
Stage stage;

public void create () {

buttons = new ArrayList<ArrayList<TextButton>>();
stage = new Stage(new ScreenViewport());
...

window = new Window("okienko", skin);
for(int i = 0 ; i< rows; ++i)
{
		for( int k = 0; k < columns; ++k)
		{
			window.add(buttons.get(i).get(k));
		}
		window.row();
}
..

stage.add(window);
}
void render()
{
         Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
	Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.draw();
} 

Do tego momentu jest dobrze. Plansza "guzikowa" rysuje się spoko. Tylko teraz nie wiem co zrobić by tą planszę powiększyć. Probowałem po prostu dodać kolejne elementy do listy ( nowy wiersz ). Z tym, że nie wiem jak wtedy wymusić wyrenderowanie tego od nowa. Myślałem, że może dodać te pętle do funkcji render, z tym że ta wywoływana jest co chwilę więc skończy się to nieskończonym wywoływaniem tych pętli. Macie może jakiś pomysł jak to zrobić? Proszę o pomoc i pozdrawiam.

0

Nie używałem LibGDX, ale z tego co widzę, to chyba wystarczy do zmiennej window dodać nowe przyciski, bo samo window już jest dodane do stage i będzie rysowane. Oprócz tego, że dodajesz przycisk do listy buttons ważniejsze jest dodanie go do okienka (window). Jeśli masz już zrobione rozszerzanie listy o nowe wiersze, to w momencie dodawanie przycisku do listy dodaj go te do window ;)

0

Masz rację, dzięki. Tylko że rozszerzając planszę w ten sposób, mogę dodać tylko wiersz na koniec, a chciałbym mieć również możliwość dodania go na początek lub dodania nowej kolumny z lewej lub prawej strony. Ma ktoś pomysł jak to zrealizować ?

0

Ja bym to zrobił tak... W momencie dodawania kolumny lub wiersza, wykonujemy metodę window.clearChildren() ( https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Table.html#clearChildren-- ) i przebudowujemy całą tabelę (wywołujemy Twoją funkcję create). Możesz sobie dopisać dodatkowe funkcje tj. AddLeftColumn, AddRightColumn, AddUpperRow itd. Żeby dodać kolumnę, musisz dodać na początek lub na koniec wszystkich list po jednym buttonie. Żeby dodać wiersz na górze, musisz dodać nową listę (rozmiaru szerokości tabeli) na początek listy list ( buttons.add(0, wierszLista) ). Po każdej operacji powiększania tabeli musisz zrobić jak pisałem, clearChildren i przebudować tabelę. W metodzie create musisz zmienić pętle, żeby się dostosowywała do listy buttons. Zamiast rows musisz wpisać buttons.size(), a zamiast columns buttons.get(i).size().

1 użytkowników online, w tym zalogowanych: 0, gości: 1