Samstag, 11. Januar 2014

PreAlpha 0.0.1 und MapEditor 0.1.4.1 auch auf YouTube

So, ich habe mich die letzten beiden Tage rangesetzt und habe zwei Videos gemacht, eines, welches Arengu PreAlpha 0.0.1 zeigt und ein anderes, welches eher ein Tutorial sein soll für den MapEditor 0.1.4 und 0.1.4.1.
Viel Spaß beim angucken!

Das PreAlpha 0.0.1-Video ( 10:10 )
    Hier zeige ich alle Funktionen, die es bis zu dieser Version gibt. 

    Alle im Video vorgestellten Downloads findet ihr hier auf diesem Blog unter "Downloads".

Das MapEditor Tutorial ( 12:06 )
    Ein grobes Tutorial, wie man den MapEditor der Versionen 0.1.4 und 0.1.4.1 benuzt um eigene Maps zu erstellen. Dazu kommt die Bedienung des Test-Modus' und die des Coll.-Managers. 

    Alle im Video vorgestellten Downloads findet ihr hier auf diesem Blog unter "Downloads".

Bitte schreibt mir zurück ( auf YouTube oder hier ), wie ihr die Videos findet ( sind leider ein paar mehr oder weniger unschöne Schnitte drin :/ ).

mfg
Hauke

Freitag, 10. Januar 2014

MapEditor Beta: 0.1.4.1

Hier nur eine kleine Änderung am bisherigen MapEditor.

Was wurde geändert?
Das platzieren von Texturen wurde verändert. Bisher war das Feld oben links an der Textur das, auf welchem die Textur lag, nun ist es das unten links ( s. Bild ).

Wieso wurde das geändert?
Im Spiel ist es einfacher dieses System zu verwenden, daher musste der MapEditor angepasst werden.


Um Maps für Arengu 0.0.1 zu erstellen, muss mindestens Version 0.1.4.1 verwendet werden!
( Bei 0.1.4 wird die Map auch angezeigt, Texturen sind jedoch z.T. verschoben )

Der Download erfolgt über Sourceforge.net ( Download ).

mfg
Hauke

Mittwoch, 1. Januar 2014

Arengu PreAlpha-0.0.1 Release

So, endlich ist es soweit, der erste offizielle Release vom "neuen" Arengu!

Seid euch allerdings bewusst, dass wir und noch in der PreAlpha-Phase befinden und dies die aller erste Version überhaupt ist, daher können Fehler und Ungereimtheiten durchaus auftreten und sind daher zu tolerieren ( schreibt aber bitte, wenn euch etwas auffällt, danke! ).

Download - Sourceforge.net
( Achtung: Es wird .Net 3.5 und XNA 4.0 Redistributable benötigt! )

Features:
  • Für Spieler:
    • kurzes, simples Intro
    • Laufen ( W, A, S, D )
    • Rennen ( Shift )
    • Kollisionberechnung(en)
  • Für Entwickler / Interessierte
    • Window-Management
    • Screen-Management
    • Maps ( der Version: "arengu-map-file-4.0" ) laden und darstellen
    • Pseudo-3D Berechnungen ( Charakter kann vor oder hinter einem Objekt stehen )
Screenshots:
Das Hauptmenü von Arengu.
Die Map "map_1" im Spiel.

Spielanleitung ( kurz ):
  • Starte Arengu ( öffne die Datei Arengu.exe )
  • Lies dir das aufkommende Fenster sorgfältig durch
  • Klicke auf "Spiel Starten" um das Spiel zu starten
    • "Spiel laden": Da passiert wenig, wir haben nur das Menü schon vorbereitet
    • "Beenden": Beendet das Spiel
  • Lies dir das zweite, aufkommende Fenster sorgfältig durch
  • Wähle aus zwei vorhandenen und zwei - am Anfang leeren - benutzerdefinierbaren Spielwelten eine aus
  • Habe Spaß mit der Version 0.0.1 :)

Was als nächstes kommt:
Darüber sind wir uns noch nicht ganz im klaren. Wir haben erstmal auf diese Version hingearbeitet und müssen jetzt ( auch ein wenig langfristig ) planen wie es weitergehen soll. Momentan sind einige im Urlaub oder anderweitig nicht erreichbar, weswegen wir uns erst in ein paar Wochen treffen können.

Bisher ist das Spiel noch relativ unspektakulär, da man noch keine ingame-Menüs etc. hat, aber wir befinden uns ja auch noch in der PreAlpha-Phase ( danach Alpha, dann Beta, dann die Release Candidates und danach irgendwann ist die Version 1 fertig. Es dauert also noch ).

Wie immer wäre ich über Anmerkungen, Kommentare, Kritik, etc. sehr dankbar.

Download - Sourceforge.net
( Achtung: Es wird .Net 3.5 und XNA 4.0 Redistributable benötigt! )

mfg
Hauke

Frohes neues Jahr 2014!

So, jetzt ist echt schon 2013 zu ende, kaum zu glauben!

Rückblick ( für Arengu ;) ):
  • 16.02.13: Offizielle Einstellung des Arengu-Projektes
  • 22.05.13: Offizielle Wiederaufnahme^^
    • Twitter-Account erstellt
    • YouTube-Kanal mit Tutorials, PreViews, etc.
    • Arengu in C# mit XNA neu schreiben
  • 26.06.13: Der Map-Editor geht in die Beta-Phase
  • 06.08.13: Arengu ist nun auf Source-Forge vertreten
  • 25.10.13: Eigentliches Spiel angefangen
  • 21.12.13: Fenster-Management fertig
Was 2014 kommen wird:
Ich möchte mich da nicht aus dem Fenster lehnen, daher ist hier nur aufgelistet, was ich mir wünsche, was kommen soll:
  • Arengu in der Alpha-Phase
  • komplette Story
  • vollständiges ( nicht unbedingt voll funktionsfähiges ) ingame-Menü
  • evt. ( !!! ) fertiges Quest-System
Ich wünsche euch allen auch viel Erfolg in dem, was ihr 2014 vor habt und bedanke mich ganz herzlich bei den 3000 Besuchern, die diesen Blog in 2013 besucht haben.

01010110 01101001 01100101 01101100 
01100101 01101110 00100000 01000100 
01100001 01101110 01101011 00100000 
01100001 01101110 00100000 01100001 
01101100 01101100 01100101 00100001
"Vielen Dank an alle!"

mfg
Hauke

PS.: Wenn ich die nächsten Tage fleißig bin, gibts bald die erste PreAlpha-Version von Arengu!

Dienstag, 24. Dezember 2013

Frohe Weihnachten

Allen eine frohe Weihnacht, auf das jeder reichlich Geschenke bekommt ;)

Weihnachten steht vor der Tür,
aus diesem Grunde sind wir hier.
Um Dir zu schenken Dein Weihnachtspräsent,
eine große Freude für Dich am vierten Advent.
So pack es nun aus und erfreu Dich am Router,
Du als Informatiker weißt: Dies ist ein guter!


mfg
Hauke

Samstag, 21. Dezember 2013

Die wichtigsten Controls sind fertig

Endlich habe ich die Scrollbar und die Liste fertig. Zum Schluss galt es noch beides zu verbinden, was aber nicht so schwer war ( ist halt gut programmiert ;) ).
Davor hatte ich dann schon das Label und die CheckBox fertig, wollte aber alles in einen Post unterbringen. Mir ist dann ( als ich den Post soweit fertig hatte ) eingefallen, dass ich die Input-Box ganz verbessen hatte ;) , die hab ich dann auch noch schnell gemacht.


List-Control 


Aufbau:
  • Jede Zeile ist unterstrichen
  • Kein automatischer Umbruch ( bei zu langen Zeilen )
    • evtl. später
Methoden ( public ):
  • ListBox(...);
    • verschiedene Parameter stehen bereit
  • void Update(GameTime gameTime);
  • void Draw();
  • void Add(String);
  • void Delete(String);
    • noch nicht implementiert, da ich noch gucke, wie ich das am besten mache ( nach Eintrag suchen, oder statt den Eintrag als String doch lieber die Zeile als Integer übergeben ...)
Liste erstellen:

public ListBox(Window windowHandle, String Title, Rectangle position, Texture2D Texture, SpriteFont Font, Color fontColor, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, Texture2D Texture, Color fontColor, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, Texture2D Texture, SpriteFont Font, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, Texture2D Texture, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, Color fontColor, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, SpriteFont Font, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, String Title, Rectangle position, SpriteBatch spriteBatch)
public ListBox(Window windowHandle, Rectangle position, SpriteBatch spriteBatch)


Label-Control


Aufbau:
String an bestimmter Position zeichnen, fertig ;)

Methoden ( public ):
  • Label(...);
    • verschiedene Parameter stehen bereit
  • void Draw();
Label erstellen:

public Label(Window windowHandle, String text, Vector2 Position, SpriteBatch spriteBatch, SpriteFont font, Color color)
public Label(Window windowHandle, String text, Vector2 Position, SpriteBatch spriteBatch, SpriteFont font)
public Label(Window windowHandle, String text, Vector2 Position, SpriteBatch spriteBatch, Color color)
public Label(Window windowHandle, String text, Vector2 Position, SpriteBatch spriteBatch)


Scrollbar-Control


Aufbau:
Erzeugt ein Scrollbalken, der unabhängig von einem anderen Control dargestellt wird.

Methoden ( public ):
  • ScrollBar(Rectangle Position, int ReferenceHeight, SpriteBatch spriteBatch);
  • void Update(GameTime gameTime);
  • void Draw();
  • void SetReferenceHeight(int ReferenceHeight);
ReferenceHeight:
Dieser Wert gibt an, wie hoch der Bereich ist, auf den die Scrollbar Einfluss nehmen soll.
  • Bsp.: Ich habe eine Liste, die 300 Pixel hoch ist. Die Einträge alle untereinander gezeichnet sind aber 500 Pixel hoch, so ist meine Referenz-Höhe ( ReferenceHeight ) 500. 
Das Scrollbar-Control erstellt nun ausgehen von diesem Wert die Höhe des Balkens.

Auslesen des Balkens:
Die Position des Balkens ( die Y-Position ) bestimmt schließlich die hoch der Referenzbereich ( also z.B. der Listeninhalt ) hoch/runter geschoben werden soll. Hierzu wird die Höhe nicht in Pixel, sondern als Dezimalzahl zwischen 0 und 1 angegeben. Bei 0 befindet sich der Balken ganz oben, bei 1 ganz unten, bei 0,5 somit genau in der Mitte.
Die Verschiebung muss dann im Code des Referenz-Controls ( z.B. der Liste ) stattfinden.
Setzen kann man diese Höhe mit dem Befehl: SetReferenceHeight(int ReferenceHeight);

Scrollbar erstellen:

public ScrollBar(Rectangle Position, int ReferenceHeight, SpriteBatch spriteBatch)


CheckBox-Control


Aufbau:
Stellt eine typische Checkbox dar, die den Zustand "gecheckt" oder "nicht-gecheckt" haben kann.

Methoden ( public ):
  • CheckBox(...);
  • Boolean Hover();
  • Boolean IsPressed();
  • void Draw(); 
Auslesen des Zustandes:
Einfach auf den Boolean Checked zugreifen ( ist public ).
True - ist gecheckt
False - ist nicht gecheckt

Erstellen einer CheckBox:

public CheckBox(Window windowHandle, String text, Rectangle position, SpriteFont font, Texture2D texture, Texture2D texture_point, Color? fontColor, Color? pointColor, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, String text, Rectangle position, SpriteFont font, Texture2D texture, Texture2D texture_point, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, String text, Rectangle position, SpriteFont font, Color? pointColor, Color? fontColor, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, String text, Rectangle position, SpriteFont font, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, Rectangle position, Texture2D texture, Texture2D texture_point, Color? fontColor, Color? pointColor, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, Rectangle position, Texture2D texture, Texture2D texture_point, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, Rectangle position, Color? pointColor, Color? fontColor, Boolean check, SpriteBatch spriteBatch)
public CheckBox(Window windowHandle, Rectangle position, Boolean check, SpriteBatch spriteBatch)


Input-Control


Aufbau:
Stellt ein Eingabefeld dar, in dem man bisher alle Buchstaben ( groß & klein, inkl. Umlaute ), alle
Zahlen, sowie die meisten Sonderzeichen der deutschen Standard-Tastatur eingeben kann.

Methoden ( public ):
  • Input(...);
  • void Update(GameTime gameTime);
  • void Draw();
  • void SetPosition(Rectangle newPosition);
  • void SetState(Boolean newState); // (De-)aktiviert das Feld
Auslesen der Eingabe:
Es steht einer anderen Klasse der String Text zur Verfügung, dieser beinhaltet die Eingabe.

Erstellen eines Input-Feldes:

public Input(Window windowHandle, Rectangle Position, String Text, SpriteBatch spriteBatch)
public Input(Window windowHandle, Rectangle Position, String Text, Boolean Enabled, SpriteBatch spriteBatch)
public Input(Window windowHandle, Rectangle Position, String Text, Boolean Enabled, Color color, SpriteBatch spriteBatch)
public Input(Window windowHandle, Rectangle Position, String Text, Boolean Enabled, Color color, Texture2D texture, SpriteBatch spriteBatch)
public Input(Window windowHandle, Rectangle Position, String Text, Boolean Enabled, Texture2D texture, SpriteBatch spriteBatch)


Was als nächstes kommt


  • Evtl. mehrzeilige Input-Felder
  • Kleinigkeiten
    • Nicht endlos kleine ScrollBar-Balken ( ist theoretisch möglich ;) )
    • Löschen von Listeneinträgen
Ich hoffe ihr findet die Controls mit den Texturen soweit ganz gut ( mir gefallen sie wohl, hab auch immer mal wieder Kleinigkeiten an den Grafiken gefeilt ).
Falls ihr Ideen, Anmerkungen, etc. hab schreibt mit ruhig Kommentare oder eine E-Mail ( s. Kontakt ).

mfg
Hauke

Ps.: Das ist der 100ste Post auf diesem Blog^^ 

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