Samstag, 16. November 2013

Buttons fertig

So, hier also ein kleiner Bericht über die momentane Entwicklung.

Ich habe soweit die Buttons fertig :)
Von Aussehen passt alles schon mal, man hat zudem verschiedene Möglichkeiten das Aussehen manuell zu ändern.

Mögliche manuelle Anpassungen der Buttons:
  • eigene Schriftarten
    • über button.Font = ...;
    • auch über den Konstruktor anpassbar
  • spezielle Schrift- & Hintergrundfarbe
    • über button.fontColor = new Color(...);
      ( Schriftfarbe )
    • über button.bkgColor = new Color(...);
      ( Hintergrundfarbe )
    • auch über den Konstruktor anpassbar
  • eigene Textur
    • nur über button.texture = ...; anpassbar
Bisher enthaltene Methoden:
public Boolean Hover(){ }
    // Prüft ob die Maus über dem Button ist
public Boolean IsPressed(){ }
    // Prüft ob der Button gedrückt wurde
public void Draw(){ }
    // Zeichnet den Button

Verbindung Control - Fenster:
Ich habe mich dann gefragt wie ich es hinkriege, dass ein Control quasi zum Fenster gehört. Das wollte ich so haben, weil ich dann nur sagen muss window.Draw(); und das Fenster dann "sein" Controls selbst zeichnen soll. Dadurch muss ich nicht Button1.Draw(); Button2.Draw() ... machen.

Ich habe also eine Liste erstellt, in der nur Buttons gespeichert werden, somit kann ich ganz einfach Methoden der Buttons aufrufen.
Zudem habe ich jedem Buttons das Fenster-Handle zugewiesen, auf dessen Fenster es sich gerade befindet.

public class Window
{
    public List<Button> Button = new List<Button>();
    // ... ( Andere Variablen, Konstruktor, etc. )
    public void Draw()
    {
        // Erst Fenster ansich zeichnen
        for (int i = 0; i < Button.Count; i++)
        {
            Button[i].Draw();
        }
    }
}
public class Button
{
    Arengu game;
    // ...
    public Button(Arengu winHandle, ...)
    {
        this.game = winHandle;
    }
}

Somit kann ich vom Fenster aus Button-Methoden aufrufen und umgekehrt.

Hier ein Bild, wie es im Spiel aussehen wird:

Was als nächstes kommt ( allgemein ):
  • Hauptmenü
    • Liste im Spiel-laden Menü
  • Neue Controls
    • Label
    • Liste ( mit Scrollbalken )
    • Evtl.: CheckBoxen
mfg
Hauke

Sonntag, 10. November 2013

Fenster Management funktionsfähig

So, endlich funktioniert alles wie es soll!
Ich habe die letzten Tage damit verbracht mir Grafiken für die Spiel internen Fenster auszudenken und diese pixelgenau zeichnen zu lassen. Das war zwar einfach, aber mit einer Menge Arbeit verbunden.

Das Tileset:
Damit ich möglichst wenig Bilder nachher habe, habe ich es so gemacht, dass ich alle benötigten Texturen für die Fenster in eine Datei gepackt habe und XNA ( bzw. der "WindowManager" ) sucht sich dann die passenden heraus.

Alle bisher benötigten Texturen.
Button, etc. kommen noch dazu.
Ich habe dann für die Positionen der einzelnen Elemente eine eigene kleine Datei angelegt, wo dann alle Positionen drin stehen:
Rahmen_links,0,0,9,500
Rahmen_rechts,9,0,9,500
Rahmen_oben,18,0,500,9

Rahmen_unten,18,9,500,9
Rahmen_Ecke,18,18,64,64
Ecke_BKG,82,18,72,72
Close_Selected,154,18,56,56
...
Auf diese Weise kann man einfach die Positionen ändern, da auch  immer dabei steht wofür diese Koordinaten stehen.

Hier nun das Ergebnis:
Beispiel Fenster - So sieht es später aus
( Control kommen noch dazu )
Die Symbole in den Ecken haben natürlich alle eine Bedeutung:
  • Rune oben links: Steht für das Runen-System in Arengu und die damit verbundene Magie
  • Schwert und Schaufel oben rechts
    • Steht für die Soldaten / den Krieg und die bäuerlichen Verhältnisse in der Bevölkerung
    • Dient als "Schließen" Button ( wenn man darauf geht, wird der rote Schein stärker )
  • Schwarze Krone unten links: Steht für den König im nördlichen Königreich
  • Goldene Krone unten rechts: Steht für den König im südlichen Königreich
Bitte schreibt doch als Kommentar, wie ihr dieses Beispiel Fenster findet und was ich eventuell noch ändern sollte.

Was jetzt noch kommt, sind:
  • Button
  • Label ( mit verschiedenen Schriftwarten )
  • Input Felder
Warum keine WindowsForms Elemente?
Weil ich gerne alles variabel haben möchte, sprich ich möchte sagen können, dass auch die einzelnen Controls eine bestimmt Textur oder gar eine Animation tragen sollen. Außerdem möchte ich lieber ohne Ereignisse zur Abfrage verschiedener Aktionen auskommen, da mir persönlich Ereignisse nicht so liegen ;).

mfg
Hauke