Montag, 14. April 2014

Sprites auf Androidgeräten erstellen

Ich bin ja schon ein echter Fan von Game Design in jeder Situation (zB im Zug, Bus, beim warten etc). Leider ist mir das auspacken des Laptops im Zug ziehmlichn umständlich. Bis dann der Rechner hochgefahren und die Software einsatzbereit ist, habe ich schon 1/4 der Strecke hinter mir.
Es musste was geschehen.
Ich habe mich mal im Google App-Store umgesehen und einige interessante Programme gefunden. Trotzdem war gut 90% Schrott. Eine App hat es mir aber angetan. Der Titel ist Pixel-Touch. Diese App bietet alle Funktionen, die man für das Sprite erstellen braucht. Funktionen wie Rückgängig und Wiederherstellen (Undo/Redo), Ausfüllen, zeichnen Geometrischer Formen, markieren, kopieren und vieles mehr. Die Sprite größe ist frei wählbar und es sind Transparenzen erlaubt. Gespeichert wird im PNG Format. Somit sind die Dateien problemlos in Game Maker importierbar. Was mir sehr gefällt, ist die, ich nenne sie jetzt einfach mal Mirrored-Drawing Funktion. Dabei wird eine Linie durch die mitte gezogen und somit in zwei gleiche Hälften geteilt. Wenn ich jetzt einen Pixel in die Obere-linke Ecke setze, erscheint automatisch der gleiche Pixel gespiegelt in der anderen Sprite-hälfte. Das ist ideal um symetrische Objekte zu zeichnen wie zB Charaktäre, Gesichter, Bäume etc.. Ich vermisse leider eine Linie-Zeichnen Funktion, bei der man eine Strecke von Punkt A zu Punkt B ziehen kann.
Hoffentlich kommt im nächsten Update auch diese Funktion.
Im großen und ganzem bin ich damit echt zufrieden. Alle wichtigen Funktionen sind schnell erreichbar. Durch den Stufenlosen Zoom, kann man präzise Arbeiten. Der Workflow ist im großen und Ganzem Spitze.
Habe damit bereits über 100 Sprites bis 64x64 Pixel erstellt.
Bisher habe ich für Android kein besseres Tool gefunden.

Mittwoch, 9. April 2014

Kleine Tricks mit Objekten

In diesem Post will ich auf einige Tricks mit Objekten eingehen.
Das schöne am GM ist, daß die Objekte nicht zwangsläufig mit Sprites dargestellt werden müssen. Ebenfalls das verwenden einer Scriptsprache. Diese Tatsachen eröffnen gegenüber annderen Klick-Entwicklungs-Umgebungen ungeahnet Möglichkeiten.
Ich möchte in diesem Artikel nicht ins Detail gehen, sondern nur die Möglichkeiten erläutern.

Vor kurzem wollte ich ein Spiel erstellen, bei dem man von einem Seil zum anderen springen muss. Dabei sollen die Seile im Raum frei plazierbar sein und sich Physikalich korrekt verhalten. So habe ich einfach in einer Stepevent die Vorberechnungen durchgeführt und diese dann in der Drawevent mit der "draw_line" Funktion ausgegeben. Das tolle daran ist, dass ich das Objekt "Seil" überall im Level Plazieren kann. Wenn mein Spiel startet, werden die Seile "on-the-fly" berechnet. Es ist so möglich Gravitation oder Wind mit einfließen zu lassen. Dies währe über ein Sprite nur sehr mühsam bis garnicht zu bewerkstelligen.

Solche Objekte kann man auch verwenden um zB ein Baum zu sähen und ihn dann wachen zu lassen. Das kann auf ein Tastendruck erstelltes "obj_Samen" sein, dass neben dem Spieler erstellt wird. Mit der Zeit wächst aus dem Samen ein Baum (Stichwort: Fraktale). Dieser kann dann von  der Beschaffenheit seiner Umwelt beinträchtigt werden.

Ein Trick den ich oft Benutze zB um eine Unsichtbare Sperre/Mauer/Boden zu erstellen ist ein Objekt, daß nur eine Maske hat, die für die Kollisionserkennung benutzt wird. So kann man auch "unsichtbar Schalter" erstellen die bei Kollision eine Event auslösen.

Vor kurzem habe ich etwas bei Google gestöbert und ein GM-Beispiel Programm gefunden, mit dem auf eimer frei definierten Höche im Raum Wasser gezeichnet wird. Die Oberfläche wurde ins schwingem versetzt (Wasserwellen), wenn ein Objekt die Oberfläche berührt hat. Was mich sehr beindruckt hat war die Hoche Performance. Ohne weiteres kann man das Wasser in vorhandene Jump&Run Spiele einbinden. Objekte, die mit dem Wasser interagieren sollen bekommen ein Spezieles Elternobjekt (ein klick im Objekteditor).

Eine sehr beliebte Form der Abstrakten Objekt Anwendeun ist das control-Objekt. Damit kann man allgemeine Spielfunktionen steuern.
Das könnte unteranderem ein Item- bzw. Pausemenü sein.

Fazit:
Es zeigt sich schnell, daß man in Game Maker Objekte nicht zwangsläufig nur auf die Traditionelle Art und Weise verwenden muss. Game Maker biete schier Unendlich viele Möglichkeiten.

Montag, 7. April 2014

Gedankenspiele... Wie komme ich an gute Game Ideen?

Es ist wieder mal soweit. Ich als "OneMänGroup" will wieder ein neues Spielchen programmieren. Aber wie immer, fehlt die "Gute Idee". Was mach ich da am besten? Ich gehe raus in die Stadt, und schaue mich mal genau um. Da es Sonntag ist, stelle ich fest, daß die Geschäfte geschlossen sind. Es sind nur wenige Menschen auf der Strasse. Nur die Bäckereine habeN jetzt göffnet. Ich bleibe vor einer davon stehen. Draußen sind Tische und Stühle aufgestellt. Die Bäckerin kommt Bestellungen aufnemen: Zwei Kaffee mit Milch und Zucker, zwei Erdbeer-Sahne Teilchen. Noch während sie das notiert, ruft eine Kundin vom anderen Tisch: "Bezahlen bitte".
Es ist ein sich ständig wiederholender Zyklus aus dem man doch eigentlich ein tolles Spiel programmieren könnte. Ich mache mir Notizen...
Die Kundin hält einen 50€ Schein hin. Aber die Verkäuferin hat nicht so viel Wechselgeld, Also geht sie in die Bäckerei zur Kasse und kommt mit dem Wechselgeld zurück. Schon kommen die nächsten Kunden, die bedient werden wollen.
Mal sehen:
Das Spiel kömnte idealerweise Isometrisch sein, damit man alles schön erkennt. Es würde aber auch die Vogelperspektive ausreichen. Verkäuferin und andere Mitarbeiter, die man anstellen könnte. Viele Produkte/Waren (wie zB Torten, Getränke, Inventar), die man durch Upgrades bekommt um unter anderem mehr Kunden anzulocken.. Klicken, um die Mitarbeiter von Tisch zu tisch zu schicken um die Kunden zu versorgen. Am Monatsende dann Waren bestellen. Und und und (...)
Fazit: Im Grunde braucht man sich nur in der realen Welt umzusehen. Überall gibt es die eine oder andere Spielanregung. Man muss halt immer die Augen offen halten.
Ich Wünsche viel Spaß beim beobachten.

Freitag, 4. April 2014

Musik unterwegs machen mit dem Mobiltelefon

Vielen geht es anderen so wie mir, wenn man unterwegs ist und grade zwei Hände frei hat, möchte man was sinnvolles machen. Der MilkyTrecker ist da eine tolle App. Es isr ein Programm zum komponieren von moderner Techno, Dance, Trance etc.. Es können aber auch andere Musik Stiele erstellt werden. Gespeichert wird als XM und MOD Format.
Da der Game Maker aber leider seid der neusten Version keine Modul Musik von Haus aus unterstützt (kompatiblität etc.) muss der frisch gebackene Track als MP3 gespeichert werden. Mit Erweiterungen ist es aber möglich, auch die Module abzuspielen. Dabei kann man einzelne Spuren Spielgesteuert ein- und ausschalten. So kann man die Musik an die Atmosphäre des Spiels anpassen ohne das der Übergang springt, wie wenn man zwei MP3 Dateien aneinander reiht. Zusätzlich ist ein Musikmodul sehr Speicher sparsam und der Song kann unglaublich lang werden, ohne das das Modul wirklich größer wird. Das einzige was wirklich Speicher frisst, sind die Samples bzw Instrumente. Allerdings kann ich mich erinnern, sehr hochwertige  Module mit einer Größe unter 20kb gesehen zu haben und ich denke daß man da noch einpaar kb rausholen kann.
Trotz dem Game Maker 8 Manko ist es ein qualitativ hochwertiges Tool um seine Spielemusik unterwegs zu composen. Später kann man am Rechner sein Lied weiter bearbeiten/Vollenden. Dazu kann man zB den Fast Trecker 3 oder andere PC Programme benutzen.
Den Google Play Link zum Tool findes du hier: https://play.google.com/store/apps/details?id=org.milkytracker.sdl&hl=de


Donnerstag, 27. März 2014

Mit Eltern Objekten Arbeiten

Vererbungs Beispiel
Heute möchte ich eine tolle Funktion des Game Makers 8 vorstellen. Es ist das Vererben. Man muß sich das so Vorstellen. Ich erstelle ein Objekt obj_Enemy. Dieses Objekt beherbergt alle wichtigen Events wie z.B. das wenn man es zerstört, der Spieler Punkte bekommt oder eine Explosion entsteht. Im Grunde können in das obj_Enemy alle Events hinein, die wir sowieso in jedes Enemy-Objekt einfügen würden. Wenn unser obj_Enemy fertig ist, kommt der eigentliche Clou. Wir erstellen zwei weitere Objekte z.B. obj_EnemyShip1 und obj_EnemyShip2. Wenn wir eines der Objekte zum bearbeiten öffnen, ist direkt unter der Depth-Einstellung bzw über der Mask Auswahl das Feld für Parent (Eltern). Hier wählen wir für unser obj_EnemyShip1 und obj_EnemyShip2 das Objekt obj_Enemy. Auf diese weise bekomme
nun unsere zwei Objekte die Events von Ihrem "Eltern-Objekt" also obj_Enemy. Auch wenn die Eventliste unserer beiden Objektet leer zu sein scheinen, sie haben die Events von Ihrem Eltern-Objekt.
Jetzt können wir jeden unsere zwei Objekte zusätzliche/besondere Events Anhängen wie z.B. Bewegungsverhalten und Feuerkraft, die diese Individuell machen. Vorteil ist, daß man z.B. Kollisionen jetzt nicht mit dem Objekt A,B,C...n definieren muss, sondern nur mit den obj_Enemy. Was eine Menge an Code spart. Wenn sich das Grundverhalten der Obj_EnemyShip1 & 2 und vielleicht 3 ändern soll. So braucht man nicht alles doppelt und dreifach zu machen, sondern nur das obj_Enemy ändern.

So ich finden das diese Einführung erstmal reichen sollte. Ich würde mich sehr über Anregungen für weitere Themen freuen.

Sonntag, 23. März 2014

Der coolste kostenlose Sprite Editor: aseprite Animated sprite editor & pixel art tool

Bester kostenlose Sprite Editor

Heute möchte ich euch einen Super Sprite Editor vorstellen. Der aseprite (Animated sprite editor) ist schnell zu erlernen und Intuitiv zu bedienen. Ich benutze um meine Grafiken zu erstellen mittlerweiler fast nur noch diesen. Zu finden ist dieser auf der Homepage http://www.aseprite.org/. Ein Wiki sowie ein Blog sind auf der Seite ebenfalls zu finden. Die PDF-Referenz zu diesem tollen Sprite-Tool findet Ihr auf http://www.aseprite.org/quickref.pdf.


Freitag, 21. März 2014

Game Maker 8 - Anfänger Tutorial

Hallo zusammen, habe  ein schönes Tutorial gefunden. Eine kurze PDF-Datei für Leute, die noch nie etwas mit dem Game Maker 8 zu tun hatten.

Im eBuch wird die Installation von Game Maker 8 beschrieben und wie man dann sein ersten Spielchen erstellt.

Das tolle ist, daß es auch mit der kostenlosen Lite Version funktioniert.
Leider sollte man Englisch-Grundlagen mitbringen.

Hier der Link

Würde mich sehr über Anregungen auf bestimmte Themen freuen.Schreibt mir einfach auf mein Google Konto.

Desweiteren wünsche ich allen ein schönes Wochenende.

Donnerstag, 20. März 2014

Zugreifen auf Variablen anderer Instanzen

Erstellen einer Instanz aus einer anderen Instanz. Gleich darauf sollen die Variablen der Neuen Instanz verändert werden.


var my_instanceID;
my_instanceID = instance_create(320, 200, obj_enemy);
my_instanceID.speed = 10;
my_instanceID.direction = random(360);



Bei diesem Beispiel wird in der ersten Zeile unsere Variable angelegt, in der wir uns die ID der Neu erstellten Instanz zwischenspeichern.
In der zweiten Zeile erstellen wir an den Koordinaten x=320,y=200 eine Instanz vom Objekt obj_enemy und Speichern Ihre InstanzIdentifizierungsNummer (InstanzID) in die Variable my_instanceID.
In den Zeilen 3 und 4 wird verdäutlicht, wie man die Werte der neu erstellten Instanz Verändern kann.
Dabei wird der InstranzID gefolgt von einem Punkt (.) und der Instanz Variable der jeweilige Wert definiert.

Die InstanzID ist eine Individuelle Adresse einer Objekt-Instanz. Würde den wert der Variable my_instanceID ausgeben, könnte das Ergebniss soetwas sein: (16040)

Wir könnten jetzt auch anstatt der Variable dierekt die ID der Instanz eingeben. Das würde dann etwa so aussehen:

(16040).speed = 10;
(16040).direction = random(360);


Die Werte von bereits vorhandenen Instanzen verändern.


Um die Werte einer Instanz im Spielfeld zu ändern, muß man diese ers finden. Dazu gibt es in Game Maker mehrer Möglichkeiten. Eine ist es alle Instanzen zu durchsuchen:

with(o_Enemy) {
speed += 5;
}:

Mit dieser "Schleife" wird die Geschwindigkeit um 5 für jede Instanz der Objekts o_Enemy erhöht.

Eine Andere möglichkeit ist es ein Objekt in der Nähe von x,y Koordianten zu finden.
Dazu kann man den Befehl instance_nearest(x,y,obj) benutzen.

Weitere Insteressante Instanz Befehle


instance_find(obj,n)
instance_exists(obj)
instance_number(obj)
instance_position(x,y,obj)
instance_nearest(x,y,obj)
instance_furthest(x,y,obj)
instance_place(x,y,obj) 

instance_create(x,y,obj)
instance_copy(performevent)
instance_destroy()
instance_change(obj,perf)
position_destroy(x,y)
position_change(x,y,obj,perf)

Wichtiger Nachtrag:
Wenn die Variable in Instanz A aus einer Instanz B angesprochen werden soll, dann darf Sie auch nicht in mit dem Befehl "var" initialisiert werden. Denn dann ist diese nur innerhalb den Scripts/Events gültig. Stattdessen sollte die Variable einfach mit Variable=Wert definiert werden.

Was ich vor kurzem herausgefunden habe, man kann Variablen Werte auch wie in der programmier Sprache C zuweisen, indem man zB Variable:=Wert benutzt. Das kann bei der Übersichtlichkeit helfen.