2015-09-22

LibGDX mit AdMob Google Ads und Google Play Game Services

Es war eine Odysee, so viel sei gesagt.

Ich wollte AdMob und Google Play Game Services zu meinem Android-Spiel hinzufügen, scheiterte aber immer wieder trotz genauem Befolgen der Anleitungen auf Google Developers und im LibGDX-Wiki.



Vor allem folgender Fehler ließ mich fast verzweifeln:
libgdx Error:Configuration with name 'default' not found.

Viele Anleitungen wichen stark von den beiden ab, waren aber häufig für Eclipse ausgelegt. Die Anleitung von Google selbst bezog sich auf Android Studio, welches zwar auf IntelliJ basiert, aber scheinbar doch nicht komplett kompatibel ist.


Nach ewigem hin und her entschied ich mich letztendlich doch Android Studio zu verwenden, und es klappte.


Hier die kurze Anleitung, ich baue sie bei Gelegenheit noch aus.

  1. importiert euer LibGDX-Projekt mit Open und dem build.gradle im Wurzelverzeichnis .../meinLibGDXprojekt/
  2. ladet das hier herunter
  3. entpackt den ordner und kopiert den Ordner BaseGameUtils unter libraries/ in den gleichen Ordner in dem euer LibGDX-Projekt liegt
  4. öffnet nun in Android Studio File > New > Import Module
  5. wählt dort den Ordner BaseGameUtils aus und beendet den Assistenten
  6. Android Studio trägt jetzt automatisch in eure settings.gradle ':BaseGameUtils' ein, falls nicht tut es manuell
  7. öffnet jetzt build.gradle und fügt am Ende der Android Dependencies folgendes ein

1:  project(":android") {  
2:    apply plugin: "android"  
3:    configurations { natives }  
4:    dependencies {  
5:      compile project(":core")  
6:      compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"  
7:      natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"  
8:      natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"  
9:      natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"  
10:      compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"  
11:      natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi"  
12:      natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"  
13:      natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"  
14:      compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"  
15:      natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"  
16:      natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"  
17:      natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"  
18:      compile 'com.google.android.gms:play-services-games:8.1.0'  
19:      compile 'com.google.android.gms:play-services-ads:8.1.0'  
20:      compile project(':BaseGameUtils')  
21:    }  
22:  }  


Und nun wartet bis Android Studio die Änderungen an .gradle Dateien bemerkt und Synchronisieren will, klickt dann auf Sync Now - wenn man das manuell macht kann es komischerweise schief gehen.




Kommen wir nun zu Google Ads.

Dazu muss man nur

compile 'com.google.android.gms:play-services-ads:8.1.0'

in seine build.gradle im Android-Abschnitt einfügen, dann funktioniert es. Allerdings bei mir auch nur in Android Studio.

Diese beiden Google Anleitungen haben mir sehr geholfen - viel mehr als alle anderen Artikel und Wikis (das LibGDX-Wiki eingeschlossen)

Google Play Game Services

Google Ads

PS: Wenn ihr einen Fehler wegen der Google Services Version bekommt, durchsucht euren Stacktrace nach der erwarteten Version und fügt sie einfach in  android/res/values/version.xml ein.

2015-09-11

ConsoleWall macht aus deinem PC eine Spielkonsole

Beim aktuellen Preisniveau von Videokonsolen und -Spielen fragt sich so mancher, ob es nicht Sinn macht gleich selbst eine Spielkonsole zusammenzubauen. Spieleplattformen gibt es zur Genüge: Steam, Uplay, Origin, Arc, Desura, GOG. Im Übrigen sind die Spiele auf dem PC wesentlich günstiger, bzw. werden es sehr schnell.

Zusätzlich gibt es auch noch die ganzen Emulatoren, so kann man also aktuelle Spiele und alle alten Konsolenspiele auf einem Gerät spielen.

Mit 4 Xbox360-Controllern ist das Konsolenfeeling fast perfekt. Wäre da nicht noch eine Sache...

Gemütlich auf dem Sofa sitzen, Konsole anschalten und los gehts. So einfach ist das auf dem PC meist nicht. Zuerst meldet man sich an, dann startet man die jeweilige Plattform und wechselt vlt. noch in den Vollbildmodus, dann geht es los.

Um zumindest ein bisschen mehr Konsolenfeeling auf den PC zu bringen habe ich ConsoleWall entwickelt. Es versucht euren Spielplattformen einen einheitlichen Starter zu verpassen. Ich empfehle ein extra Konto anzulegen und ConsoleWall in den Autostart einzufügen.

ConsoleWall im Vollbildmodus


Zu ConsoleWall gibt es nicht allzu viel zu sagen. Es ist ein relativ simpler Anwendungsstarter für Spieleplattformen in JavaFX / Java 8. ConsoleWall sollte unter Linux, Windows und Mac laufen. Es hat folgende Features:

Starter für
zusätzlich können die Starter für NES, SNES und N64 auch einfach RetroArch starten.

Bisher ist leider noch keine Controller-Unterstützung integriert.

Details zur Installation und den Download findet ihr im ConsoleWall-Wiki.

2015-09-10

Einen Installer für ein JavaXF Programm mit Inno Setup und IntelliJ erstellen

Ich habe mich fast kaputt gesucht. Es gibt zwar einige Artikel zu dem Thema, aber diese waren entweder veraltet, oder viel zu kompliziert oder entsprachen einfach nicht meinen Bedürfnissen.

Wenn ihr also für eure JavaFX-App einen Windows-Installer erstellen wollt und gleichzeitig auch Icon und Lizenz-Dateien anpassen wollt, seid ihr hier genau richtig.

Linux lassen wir mal heute außen vor. Das Programm welches ich packen möchte, habe ich zwar unter Linux entwickelt, ein Linux-Nutzer gibt sich aber mit einer einfachen JAR zufrieden, unter Windows möchten die Meisten leider ein Setup haben. Dann mal los.

Ich gehe hier davon aus, dass IntelliJ mit Java 8 zur Entwicklung verwendet wurde.

Zuerst installiert ihr nun Inno Setup 5.

Anschließend erstellt ihr eine neue Artefakt-Beschreibung in IntelliJ:

Build > Build Artifacts ... > Edit

Project Settings > Artifacts > + > JavaFX-Application > From module 'euer Programm'


Im Reiter Java FX nehmt ihr nun eure Einstellungen vor. Unter 'native Bundle' wählt ihr 'all'.

Anschließend klickt ihr auf okay, und dann

Build > Build Artifacts ...  > Clean

Build > Build Artifacts ...  > Build

IntelliJ bzw. der JavaFX-Packager nutzen dabei ebenfalls Inno Setup, aber auf die Erstellung des Installers hat man nicht viel Einfluss.

Wartet bis der Vorgang abgeschlossen ist und navigiert dann im Ausgabeverzeichnis zu euer_Projekt/out/artifacts/euer_Projekt/bundles/euer_Projekt/

Genau das wollen wir im späteren Programmordner haben. Wenn ihr ein anderes Bild im Installer haben wollt, könnt ihr das jetzt tun.

Nun öffnen ihr also Inno Setup 5 und klickt euch durch den Installer. Kritisch wird es, wenn ihr die einzufügenden Dateien auswählen sollt.

Wählt zuerst oben die euer_Projekt.exe aus. Anschließend die Dateien im Ordner euer_Projekt/out/artifacts/euer_Projekt/bundles/euer_Projekt/ und zuletzt den Ordner selbst. Nehmt die übrigen Einstellungen nach eurem Belieben vor.

Anschließend klickt ihr euch bis zum Ende durch - uuuuun fertig :)

2015-09-01

Angsthasentum im Schlaraffenland

Üblicherweise poste ich hier immer mal wieder Artikel zu Software-bezogenen Themen. Heute sehe ich mich aber gezwungen mal ein ganz anderes Thema anzuschneiden.

Zelte für Schutzsuchende in der Türkei


Dass große Teile der Welt immer wieder in Krieg versinken ist nichts neues. Wer Schuld daran ist und warum es vorerst immer so weiter gehen wird, das lassen wir hier mal außen vor. Es sei nur so viel gesagt: unser Luxus ist mit der Armut vieler anderer erkauft.

Wir sehen Filme, lesen Bücher und bewundern die Helden in Geschichten. Nicht selten wünscht sich ein jeder von uns mal ein Held zu sein, der Gefahr ins Gesicht zu lachen und jedem Widerstand zu trotzden. Wir wollen die Schwachen beschützen und das Böse besiegen.


Jeden Tag bekommen wir von Neuem die Möglichkeit Helden zu sein, ohne uns dafür eine Rippe heraus zu reißen. Doch die diffuse Angst vor dem, was eventuell irgendwann passieren könnte, hält uns ab. Der kleinliche Gedanke daran, irgendetwas könne sich für uns ändern, hindert uns.

Als die Welt in den 1930ern im Chaos versank, floh halb Europa vor der Nazimacht, welche für Deutschlands Nachbarländer den dunklen Heerscharen eines finsteren Dämonenlords glich. Doch wir alle wissen, dass die deutschen Soldaten zum großen Teil ganz normale Menschen waren, die deutsche Bevölkerung sich durch Schürung zielloser Ängste instrumentalisieren ließ. Die meisten sahen einfach zu um nur nicht selbst in Gefahr zu geraten.

Während des Krieges und auch danach nahmen nahe und ferne Länder Flüchtende auf, und damals wie heute war man skeptisch, denn "die Deutschen" mussten doch alle Nazis, Mörder und Monster sein. War es denn nicht möglich, dass sich unter den "echten" Flüchtlingen auch hochrangige und gefährliche Nazis davonstahlen?

Natürlich war das möglich und wie wir wissen geschah es auch in großem Maße, doch wäre es eine Katastrophe gewesen, wenn man deswegen alle Flüchtlinge kategorisch abgewiesen hätte.

So wie die Nachkriegsgenerationen ihren Eltern und Großeltern vorwarfen wie sie dieses unendliche Grauen nur hatten zulassen können, so werden wir uns eines Tages unseren Kindern und Enkeln stellen müssen, wenn sie uns fragen wie wir tatenlos Teil der größten unterlassenen Hilfeleistung der Menschheitsgeschichte sein konnten? Wie wir nur Zehntausende im Mittelmeer ertrinken lassen konnten.

Was werden wir antworten? Wir hatten Angst, dass diese Menschen, die ihr Leben aufs Spiel setzten um bei uns um Schutz zu bitten, uns ihre Religion aufzwingen würden? Wir glaubten, jemand der ein Smartphone besitzt könne unmöglich von einer Kugel getroffen werden, Hungers sterben oder im Meer ertrinken? Uns war es wichtiger gewaltige unterirdische Bahnhöfe, ungenutzte Flughäfen und unfassbar teure Opernhäuser zu bauen? Wir wollten nicht, dass Flüchtlinge die hier nicht arbeiten dürfen genau so viel Geld bekommen, wie Einheimische denen über Phasen der Arbeitslosigkeit hinweggeholfen wird? Wir erschauderten bei dem Gedanken, dass Männer, die es unter Einsatz ihres Lebens hier her geschafft hatten, ihre von Tod und Gewalt bedrohten Kinder und Frauen nachholen würden?

Sie würden uns fragen: Wie konntet ihr zulassen, dass Menschen, die bei euch Schutz suchten angegriffen, angefeindet und erniedrigt wurden?

Was würden wir uns selbst in 100 Jahren fragen? Worauf würden wir auf unserem Sterbebett zurück blicken?

Auf einen ganzen Haufen kleingeistiger Feiglinge. Denen ihr eigenes Wohlergehen wertvoller ist als das von 1000 anderen Menschen.

Wir werden der Menschheit nicht als Helden in Erinnerung bleiben, sondern als kaltblütige Monster und Unmenschen.


Darum rufe ich euch auf: geht in euch und fragt euch wie ihr euch selbst sehen wollt, fragt euch, was ihr von jemandem erwarten würdet, den ihr in größter Gefahr um Schutz bittet, fragt euch ob es wirklich so schlimm wäre, wenn ihr etwas von eurem Luxus abgeben müsstet.

Macht euch euer eigenes Bild! Sucht Gruppen in eurer Gegend und fragt wie ihr helfen könnt. Geht auf die Menschen zu und reißt die Mauern des Unbekannten ein. Schreitet ein, wenn augenscheinliche Fremde in der Öffentlichkeit angepöbelt und beleidigt werden und fordert Umstehende auf euch zu helfen. Sprecht mit den Menschen in eurer Familie und im Freundeskreis darüber, wenn ihr merkt, dass sie sich ihren Ängsten hingeben! Scheut euch nicht Volksverhetzung zur Anzeige zu bringen. Stellt rechte Hassprediger zur Rede.

Das Abendland geht unter wenn unsere Werte wie Nächstenliebe, Freiheit und Menschenwürde von uns mit Füßen getreten werden.

Heißt Schutzsuchende Willkommen - Refugees Welcome

http://www.ichhelfe.jetzt/
(Steht in keinerlei Verbindung mit diesem Blog)