[Java/Android] Superhorst

Kommentare anzeigen Worklog abonnieren

Worklogs [Java/Android] Superhorst

#7 - Modell laden und anzeigen

Mittwoch, 22. Mai 2013 von Tennisball
Moin.

Nein, wir sind nicht eingeschlafen. Es geht nur etwas langsam voran, da ich in letzter Zeit eher weniger Zeit für das Projekt aufbringen konnte. Trotzdem gibt es einen kleinen Fortschritt: Es können nun 3D-Modelle im MS3D-Format geladen (und angezeigt) werden.

Dazu erstmal ein Screenshot:
user posted image
Schildkröte ohne Textur

Wie man hier sieht, hat das Modell noch keine Textur verpasst bekommen. Jedoch schien der Schritt dorthin nicht mehr allzu groß, denn es musste lediglich eine Textur daran "gebunden" und die UV-Koordinaten an OpenGL gegeben werden. Dies tat ich, jedoch führte es zu folgendem Ergebnis:

user posted image
Schildkröte mit Textur inkl. Fehler

Die Ursache dieses Problems konnte ich bis jetzt jedoch nicht herausfinden. Was ich aber herausfand war, dass die Struktur meines Codes etwas seltsam ist (Beispielsweise zeichne ich alle Dreiecke einzeln mit jeweils einem eigenen Buffer für Vertices und UV-Koordinaten, anstatt sie mit insgesamt zwei Buffern alle "auf einmal" zu zeichnen). Als nächstes steht nun erstmal die Verbesserung dessen auf der Tagesordnung. Mit etwas Glück löst sich der Fehler dann "von alleine". Ansonsten muss ich meine OpenGL-Kenntnisse (sowieso) verbessern.

Mit freundlichen Grüßen,
Tennisball

#6 - Erster Zwischenbericht zum MS3D-Loader

Sonntag, 10. März 2013 von Tennisball
Moin moin,

Wie beim letzten Mal schon geschrieben, verwenden wir jetzt 3D-Modelle im MS3D-Format. Diese müssen natürlich auch in das Spiel geladen werden, also musste ein MS3D-Loader her. Diesen schreibe ich gerade. Auch wenn es bestimmt irgendwo da draussen im Internet einen gibt; Ich möchte ihn gerne selbst schreiben.

Um bei Android-Apps auf Dateien zugreifen zu können, gibt es normalerweise einen Ressourcen-Ordner "res". In den Unterordnern "drawable-*dpi", "layout", "values" und "raw" kann Dementsprechendes abgelegt werden. Man kann dann im Code z.B. mit "R.drawable.testbild" (ein konstanter Integer-Wert, der beim Build-Vorgang der App festgelegt wird) auf "testbild" im drawable-Ordner zugreifen. Nun würde man 3D-Modelle im Ordner "raw" unterbringen. Jedoch werden die Materialtexturen des 3D-Modells als Dateiname angegeben, beispielsweise "holz.png". Man kann hiervon nicht auf den Integer schließen, der auf das Bild zeigt.
Die Lösung des Problems: Neben dem Ordner "res" noch einen Ordner "assets" erstellen. Auf Dateien in diesem Ordner kann man über eine AssetManager-Instanz per Dateiname zugreifen. Zunächst muss dieser AssetManager initialisiert werden. Das geschieht mithilfe der Methode android.content.Context.getAssets(). Der Context in meinem Fall ist die Activity, die beim Start der App gestartet wird. Ich weise das nun also einem AssetManager zu. Später kann ich dann per Dateiname auf entsprechende Dateien zugreifen, wie im folgenden Code steht.
Code: [AUSKLAPPEN]
// AppManager.java
public static void init( Context context )
{
   AppManager.assetManager = context.getAssets();
   // ...
}


// Loader.java
public void loadMesh( String filename )
   {
      // Auslesen von Dateien, kann eine IOException verursachen, also ein Try-Catch-Block benutzen
      try
      {
         // Einen LittleEndianReader initialisieren (Das MS3D-Format ist Little Endian)
         LittleEndianReader littleEndianReader = new LittleEndianReader( AppManager.assetManager.open( filename ) );
         // Daten auslesen, zum Beispiel:
         c = littleEndianReader.readChar();   // Char auslesen
         Log.i( "Loader", "Char: "+c );      // Ausgelesenen Char in den Log schreiben
         // ...
      }
      // ...
   }


Wie im Code zu lesen ist, braucht man zusätzliche Funktionen, um Little Endian lesen zu können. Eine kurze Erklärung zu Little Endian: Würden wir beispielsweise einen Integer aus 4 Byte speichern wollen, würden wir in Big Endian das "bedeutsamste" Byte zuerst schreiben, und dann der Reihenfolge nach gehen. Nehmen wir zum Beispiel den Integer 0xFF11BB77 (4279352183), wird (bei Big Endian) erst das Byte FF in die Datei geschrieben, danach 11, dann BB, dann 77. Bei Little Endian ist die Reihenfolge genau umgekehrt. Hier würden wir erst 77 schreiben, danach BB, dann 11 und dann FF. Dementsprechend muss die Byte-Reihenfolge beim Lesen auch wieder umgedreht werden. Für mehr Informationen zum Thema siehe Wikipedia: Endianness

So, nun habe ich erstmal nur den Header einer Test-MS3D-Datei ausgelesen. Dieser enthält 10 Chars, die im Normalfall zusammen "MS3D000000" ergeben sollten. Außerdem befindet sich dort noch ein Integer mit der Version. Zur Überprüfung hab ich das Ausgelesene in den Log geschrieben, und sehe, dass alles erfolgreich war:
user posted image

Ich kann nun also damit anfangen, die wirklichen Daten des Meshes auszulesen.
Bis zum nächsten Mal.

Mit freundlichen Grüßen,
Tennisball

#5 - Umstieg auf 3D-Grafiken

Montag, 25. Februar 2013 von pulverfass
Hallo liebes Forum,

Tennisball und ich haben uns überlegt wie wir es nun auf dem Smartphone gestalten wollen. Wären wir am PC geblieben, wäre es auch wahrschienlich bei 2D geblieben.

Hier mal ein Konzept wie es aussehen könnte:
user posted image

Beschreibung:
- Runder Knopf für die Laufgeschwindigkeit
- 1-4 verschiedene Funktionen

Ich habe mich schon mit den Hindernissen und an dem Gelände beschäftigt. Es werden Low-Poly Modelle mit Blender erstellt und als Milkshape-Format exportiert. Es wird keine andere Textur als eine Farbtextur geben mit aufgemalten Licht/Schatten. Normal- bzw. Displacement Maps wären vielleicht zu rechenintensiv.

Konzept Mesh-Gruppe Nr.1

3D-Modelle ohne Textur

Gruß
Robin

#4 - Umstieg

Freitag, 15. Februar 2013 von Tennisball
Hallo zusammen,

Ich komm mal gleich zur Sache:
Wir haben vor einer Weile beschlossen, das Spiel als Android-App zu entwickeln. Darum wird Superhorst jetzt auch nicht mehr mit BlitzMax programmiert, sondern mit Java. Einfach aus dem Grund, dass wir das mal ausprobieren wollen. Und da Superhorst als BlitzMax-Projekt nur so vor sich hin dümpelte und es (zumindest programmiertechnisch gesehen Mr. Green ) nie wirklich große Fortschritte gab, haben wir uns dafür entschieden.

Ob es aufgrund mangelnder Performance Abstriche geben muss, wissen wir noch nicht. Das muss erst getestet werden. Ich vermute aber, dass wir wenig bis gar nichts verändern müssen, da unser relativ simples Jump and Run nicht wirklich eine aufwendige Effektschleuder ist. Auch wegen begrenzten Eingabemöglichkeiten (Touchscreen statt Tastatur) wird es wohl keine Abstriche geben. Wir hätten da bis jetzt eigentlich nur Laufen und Springen, Fliegen, und Einsatz der Spezialfähigkeit. Das lässt sich noch gut auf einem Touchscreen umsetzen.

Der Editor wird höchstwahrscheinlich auch nicht mit BlitzMax weitergeschrieben. Und da das hier ein Blitz-Worklog ist, hab ich hier jetzt leider nicht mehr viel zu erzählen. Wir werden dann in einem neuen Worklog in der (hoffentlich bald kommenden) blitzfremden Sektion weiter über das Projekt berichten. (Sobald dort der Worklog erstellt ist, gibt es von hier aus dann noch einen Link dahin.)
Bis dann!

Gruß,
Tennisball

#3 - Fortschritt des Editors

Samstag, 8. Dezember 2012 von Tennisball
Moin moin.

Damit das hier nicht so einstaubt, möchte ich euch erzählen, wie es so vorangeht mit Superhorst.
Im Moment bin ich mit der Programmierung des Editors beschäftigt.


Aufbau des Editors
Er besteht aus mehreren "Modulen", von denen jedes mit einem eigenen Fenster dargestellt wird. Die Fenster kann man je nach Bedarf ein- bzw. ausblenden, damit sie nicht stören.


Was kann der Editor bereits?
Es gibt jetzt bereits zwei Module:
- Das Map-Ansichts-Modul (Screenshot). Es ist das Hauptfenster. Hier platziert der Benutzer Tiles und die Map wird angezeigt.
- Die Tileauswahl (Screenshot). Hier wählt der Benutzer Tiles aus, die er auf der Map platzieren will.

Außerdem ist die Funktion für das Laden von Maps bereits implementiert. Speichern geht allerdings noch nicht. Wink


Wie ist das umgesetzt?
Im Moment wird für den Editor noch die MaxGUI benutzt. Das hat allerdings bestimmte Nachteile, nämlich dass das ganze nicht ganz so flüssig läuft, wie ich es gerne hätte. Außerdem wird der Code meiner Meinung nach etwas unsauber mit dem ganzen MaxGUI-Kram.


Was ist noch geplant?
- Das Hauptfenster soll eine Menüleiste bekommen, wie das eben so üblich ist. Sie soll Befehle wie Laden und Speichern, sowie das Einblenden von Modulen und vieles mehr bereitstellen.
- Es werden weitere Module hinzukommen: Darunter auch eine Layerauswahl mit Layeroptionen und ein Tileseteditor.
- Die MaxGUI soll durch eine selbst geschriebene GUI ersetzt werden. Das soll die vorher beschriebenen Probleme (Läuft nicht flüssig, unsauberer Code) beheben. Außerdem wird man dadurch anpassungsfähiger und man hat keine Massen an störenden Fenstern.


Mit freundlichen Grüßen,
Tennisball

#2 - Erläuterung der Grafikarbeiten

Sonntag, 26. August 2012 von pulverfass
Hallo.

Ich (Pulverfass) möchte euch etwas über die Grafiken erläutern.

Concept Art:

Dies waren die ersten Bilder, die einfach aus Langeweile entstanden.
Klick mich

Danach entstand das Bild, welches euch Tennisball bereits gezeigt hat.
Wir haben uns dann zusammen besprochen welche Items, Landschaft etc.
in das Spiel eingebaut werden soll.

Erste Test-Grafiken:

Diese Grafiken hab ich nur zu Testzwecken gemacht, die dann später aufgearbeitet werden.

Keks
Banane

LG
Robin aka pulverfass

#1 - Projektvorstellung

Samstag, 25. August 2012 von Tennisball
Guten Tag zusammen.

Wir möchten euch unser neustes Projekt vorstellen:

Superhorst


Um was handelt es sich hierbei?
Es wird ein 2D-Jump'n'Run werden, in dem man unseren Helden, namentlich Superhorst, durch die Stadt rennen lässt und im Kampf gegen seine Feinde unterstützt. Dabei kann man ihm durch verschiedene Pick-Ups entsprechende Vorteile (oder auch Nachteile) gewähren. Beispielsweise lädt sich durch das Einsammeln von Dosenbier seine "Rülpskraft" auf, die er für das (starke) Rülpsen benötigt, was eine der Arten der Bekämpfung von Gegnern darstellt. Desweiteren gibt's natürlich hier und da Hindernisse, wie zum Beispiel Stacheldraht, die es zu umgehen gilt. Sollte man dabei scheitern, verletzt sich Horst und verliert Lebenskraft, welche sich durch das Einsammeln von (nicht verfaulten) Bananen regenerieren kann.


Warum ist dieser Horst so super?
Neben Rennen und Springen verfügt Superhorst über die folgenden Fähigkeiten:
- Durch seine perfektionierte Rülpstechnik ist er imstande sehr kräftig zu rülpsen, und kann damit sogar Feinde bekämpfen
- Er ist der einzige, dem ein Energy-Drink wirklich Flügel verleiht!
- Wie auch "Super Mario" kann Horst seine Gegner einstampfen, indem er auf sie springt.
- Und eventuell noch weitere ...


Was steht bereits?
Es stehen bereits Stücke der Tile-Engine. Diese wird folgende Features haben*:
- Parallax Scrolling
- Animierte Tiles (zum Beispiel für Lichter in Häusern, die an und aus geschaltet werden, oder auch für Schranken)
- Vieleckige Tiles; Um das mal etwas genauer zu erklären:
Ein Tile besteht aus seiner Textur (die natürlich quadratisch ist) und "Kollisions-Linien". Nur wenn der Spieler an eine dieser Linien stößt, findet eine Kollision statt. Die Linien kann man dann zum Beispiel zu einem Dreieck zusammenfügen und hat somit praktisch ein dreieckiges Tile.
*ob wir von allen dann letztendlich Gebrauch machen werden, steht noch nicht fest.

Für die Grafiken wurden außerdem schon ein paar Dinge modelliert. Folgerichtig werden die Grafiken für das Spiel also erstmal im 3D-Modeller entstehen, dann gerendert und eventuell noch bearbeitet werden.


Pics?
Vom Spiel an sich gibt es noch nichts zu sehen, jedoch haben wir natürlich auch Concept Art von unserem Helden Superhorst, damit ihr euch das vielleicht besser vorstellen könnt: Klick mich an.
(Sein Logo hat er von einer Bushaltestelle geklaut.)


Wer arbeitet am Projekt mit?
Für die Grafiken ist pulverfass zuständig, und für den Code bin ich, Tennisball, verantwortlich.


Das war's dann erstmal. Ich hoffe, wir konnten euer Interesse für das Projekt wecken. Smile
Feedback hören wir uns natürlich auch gerne an.

Mit freundlichen Grüßen,
Tennisball