Sama biblioteka ma zawierać sporo prostych kontrolek: przyciski, suwaki, listy, kontrolki do wprowadzania textu a także joysticki kierunku jak i rotacji i inne rzeczy które przydadzą się w projektach.
Celem jest stworzenie alternatywy dla innych GUI - która jest w pełni modyfikacyjna, jednak nie wymaga zewnętrznych programów czy znajomości innego typu języka do jej zaprojektowania. Całością można zarządzać z naszego projektu i konfigurować kod bezpośrednio.
Aktualna wersja: 0.0.7
Platforma: Android 1.5+
Licencja: Open source
Download: <aktualnie niedostępne> dodam jak już zaimplementuje wszystkie podstawowe funkcje
Instrukcja użycia poniżej
1. Konfiguracja i "instalacja" biblioteki
Kod jest w postaci czystych plików klas(na razie nie zamierzam tworzyć z tego biblioteki). Żeby dodać kod do naszego projektu będziemy musieli skonfigurować nasz projekt libGDX tak aby można było go uruchomić.
Następnie dodać 2 ściezki package do naszego folderu scr:
Pierwszą i główna ścieżka, zawierająca wszystkie pliki biblioteki, nazywamy:
pl.silvergui
Drugą ścieżką w której możemy przechowywać szablony naszego menu nazywamy:
pl.layout
No a trzecia ścieżka to nasza domyślna z klasą główną naszej aplikacji, u mnie to:
pl.my.game
Teraz w klasie gry importujemy package naszego layoutu, dodając na początku:
import pl.layout.TestLayout;
I to właściwie cała konfiguracja naszego środowiska:)
2. Żeby zacząć wykorzystywać SilverGUI wystarczy utworzyć klasę Layout dziedziczącą po Window:
package pl.layout;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.Input;
import
com.badlogic.gdx.graphics.g2d.SpriteBatch;
import pl.silvergui.Button;
import pl.silvergui.ListButton;
import pl.silvergui.Scroll;
import pl.silvergui.Window;
public class TestLayout extends Window {
// Komponenty
wpisujemy tutaj
float X;
float Y;
public TestLayout(Files
fileManager) {
super(fileManager);
// TODO Auto-generated constructor stub
// Tutaj tworzymy komponenty
}
public void Draw(SpriteBatch
theSpriteBatch)
{
DrawX(theSpriteBatch);
//
rysowanie menu, zawsze na poczatku
}
public void Update(Input input)
{
UpdateX(input);
//
Window odświeżanie - zawsze na poczatku
}
}
Następnie w głównej klasie gry dodać naszą klasę Layoutu jako zmienną.
W metodzie Create() dodać konstruktor naszego Layoutu.
W metodzie Render() wywołać kolejno funkcje Render() i Draw() z naszego Layoutu
Całość prezentuje się mniej więcej tak:
package pl.my.game;
import pl.layout.TestLayout;
import
com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import
com.badlogic.gdx.graphics.GL10;
import
com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class Game implements ApplicationListener {
private SpriteBatch spriteBatch;
static final int WIDTH = 480;
static final int HEIGHT = 320;
// Window SzkieletWindow;
TestLayout lMenu;
@Override
public void create() {
// TODO Auto-generated method stub
spriteBatch = new SpriteBatch();
lMenu = new TestLayout(Gdx.files);
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void render() {
// TODO Auto-generated method stub
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
lMenu.Update(Gdx.input);
lMenu.Draw(spriteBatch);
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
3. Konkretne metody i obsługę komponentów opiszę jak wypuszczę pierwszą wersje GUI .
Poniżej zamieszczam przykładową klasę Layouta, warto dodać że kontrolować i sprawdzać elementy możemy już w Layoucie jak i w kodzie naszej aplikacji.
public class TestLayout extends Window {
// Komponenty
wpisujemy tutaj
Button
Exit;
Button OK;
Button NewGame;
Button Cofnij;
ListButton Lista;
Scroll Volume;
float X;
float Y;
public TestLayout(Files
fileManager) {
super(fileManager);
// TODO Auto-generated constructor stub
// Tworzymy button Exit
Exit = new Button(100,
150, 256, 64, "Nowa Gra");
AddButton(Exit);
Lista = new
ListButton(100,100,256,64,"Wybierz");
Lista.AddArg("maciora", 23);
Lista.AddArg("końiu", 33);
Lista.AddArg("Mater
Dei koniu wal", 33);
Lista.AddArg("Mater
Dei koniu wal", 33);
Lista.AddArg("Mater
Dei koniu wal", 33);
Lista.AddArg("końiu", 33);
Lista.AddArg("końiu", 33);
Lista.AddArg("końiu", 33);
Lista.AddArg("końiu", 33);
Lista.AddArg("Heniek
lecisz bardzo daleko co nie", 33);
AddListButton(Lista);
Volume = new
Scroll(5,200,100f,100f,false);
AddScroll(Volume);
}
public void Draw(SpriteBatch
theSpriteBatch)
{
DrawX(theSpriteBatch);
//
rysowanie menu, zawsze na poczatku
//-----------------CZŁON
TESTOWY---------------------------
theSpriteBatch.begin();
font10.draw(theSpriteBatch, "X: " + X + " Y: " + Y, 30, 50);
font10.draw(theSpriteBatch,"Wybrany index: " + Integer.toString(Lista.selectArgIndex), 30, 40);
font10.draw(theSpriteBatch,"Aktywny selectButtona: " + XsieZgadza, 30, 30);
font10.draw(theSpriteBatch,"Volume: " + Float.toString(Volume.ActualValue), 30, 20);
theSpriteBatch.end();
//--------------------
DO USUNIECIA PO TESTACH ------------------
}
public void Update(Input input)
{
UpdateX(input);
//
Window odświeżanie - zawsze na poczatku
X = input.getX();
Y =
PrzeliczYpolozeniaKursora(input.getY());
if(Exit.mouseJustClick)
{
ViewInputStream = true;
input.setOnscreenKeyboardVisible(true);
}
}
}
Widzimy tutaj że pierwsza inicjalizacja i ustawienie komponentów zachodzi w konstruktorze klasy naszego stylu menu. To tutaj modulujemy zawartość, położenie i wygląd naszych komponentów - co nie jest oczywiście ostatecznymi parametrami, bo zawsze możemy je zmienić podczas funkcjonowania naszej aplikacji.
Żeby jednak nasze komponenty same się odświeżały i żyły własnym życiem musimy je dodać do klasy Window, która je wszystkie obsługuje.
Na razie ograniczyłem ilość każdego elementu chyba do 32 albo 20 sztuk(w przyszłości albo ten limit jeszcze pomniejszę by zwiększyć wydajność albo zrobię przesuwany layout).
W metodach Draw i Update(używam tych 2 osobnych metod z racji przyzwyczajenia do środowiska XNA) musimy pamiętać by samemu zainicjować odświeżanie się menu i rysowanie komponentów.
Reszta jest opcjonalna, ale można pokusić się o dodatkowe tryby naszego layouta. Tutaj akurat wyświetlam pomocne informacje przy testowaniu mojego GUI.
Na razie to wszystko, wszystko dokładniej opiszę w dniu premiery - która nastąpi jak czas pozwoli :D
Dzięki za uwagę,
Pozdrawiam Silver