Einmal schreiben, überall veröffentlichen mit HaxePunk Plattformübergreifende Tipps

Willkommen zum zweiten Teil dieser Tutorialserie zum Erstellen von plattformübergreifenden Spielen mit HaxePunk. Als wir aufhörten, hatten wir ein einfaches Drag-Racing-Spiel fertiggestellt, das für viele verschiedene Plattformen kompiliert werden kann. In diesem zweiten Teil werde ich einige Tipps geben, damit Ihre Spiele auf verschiedenen Gerätetypen funktionieren. Wir sprechen über Bildschirmgrößen und -auflösungen, Eingabetypen, Schnittstellenlayouts und Tipps für die Übermittlung von App Stores.

Bildschirmgrößen und Auflösungen

Der Bildschirm ist das Fenster in Ihrem Spiel und sollte nicht als Nachhall hinterlassen werden. Denken Sie über die Geräte nach, auf denen Sie Ihr Spiel veröffentlichen möchten. Eine Windows / Mac / Linux-Version kann in der Regel davon abhängen, ob der Benutzer über einen Bildschirm verfügt, der groß genug ist, um im Fenstermodus auf das Spiel zu passen, und er kann im Vollbildmodus beliebige Auflösungsunterschiede in einem Letterbox-Feld anzeigen. 

Mobile Geräte sind sehr unterschiedlich. Es gibt viele Bildschirme mit verschiedenen Auflösungen und Größen. Sie können nicht garantieren, dass der Spieler auf einem Gerät mit der gleichen Auflösung wie Ihr Spiel spielt. Skalierung wird passieren.

Im ersten Artikel dieser Serie ging ich durch die Entwicklung eines kleinen Beispielspiels. Sie können das vollständige Quelltextprojekt über die Schaltfläche rechts neben diesem Artikel herunterladen. Beim letzten Mal haben Sie möglicherweise Folgendes bemerkt:

y = -image.scaledHeight;

Es gibt Eigenschaften für Breite und Höhe für Bilder scaledWidth und scaledHeight Eigenschaften auch. Die Bedeutung der Breite und Höhe eines Bildes ist offensichtlich. Die skalierten Eigenschaften sind etwas komplexer. Das scaledWidth Eigenschaft ist die Breite des Bildes, multipliziert mit der Skalierung des Bildes, multipliziert mit der Skalierung des Spiels, und scaledHeight ist ähnlich, aber für die Höhe.

Dies wird jedoch etwas verwirrend, wenn das Spiel automatisch skaliert wird. Dies kann auf einem Android-Gerät mit einer niedrigeren Bildschirmauflösung als für das Spiel vorgesehen geschehen. In einer Situation wie dieser wird die Skaleneigenschaft, die HaxePunk liest, um die Skalierung von Bildern festzulegen, und somit deren scaledWidth / Height nicht richtig eingestellt. 

In der Tat gibt es oft keine Skalierung, nur eine Verkleinerung des Bildschirms. Um dies zu beheben, können wir die gewünschte Skalierung basierend auf der Auflösung des Spiels und der Auflösung des Bildschirms berechnen, auf dem das Spiel läuft. In Main.hx können wir diesen Code hinzufügen, bevor wir die aktive Szene setzen:

Variationsverhältnis: Float = Math.min (HXP.stage.stageWidth / screenWidth, HXP.stage.stageHeight / screenHeight); HXP.screen.scaleX = Verhältnis; HXP.screen.scaleY = Verhältnis; HXP.resize (HXP.stage.stageWidth, HXP.stage.stageHeight);

Im obigen Code, Bildschirmbreite und screenHeight sind Variablen, die ich erstellt habe und auf die Breite und Höhe eingestellt habe, die ich für das Spiel verwendet habe. Sie können auch einfach Konstanten wie 640 und 480 verwenden, aber ich bevorzuge Variablen.

Der Code verwendet die Math.min () Mit dieser Funktion können Sie die Verhältnisvariable auf den kleinsten Unterschied in den Bildschirmabmessungen einstellen, um zu verhindern, dass Grafiken gestreckt werden, wenn die Unterschiede in Breite und Höhe nicht gleich sind. Möglicherweise möchten Sie das Dehnen zulassen. In diesem Fall müssen Sie einstellen HXP.screen.scaleX und scaleY zu verschiedenen Werten.

Nachdem das Verhältnis berechnet wurde, HXP.resize () wird genannt. Diese Funktion ändert den Bildschirm tatsächlich. Möglicherweise möchten Sie das Verhältnis auch für andere Zwecke speichern, aber ich habe es selten für nötig gehalten.

Mit der Bildschirmgröße können wir immer noch Folgendes tun:

// Platziere Entity in der rechten unteren Ecke des Bildschirms, unabhängig von der Größe entity.x = HXP.screen.width - entity.scaledWidth; entity.y = HXP.screen.height - entity.scaledHeight;

Dies ermöglicht uns eine konsistente Benutzeroberfläche für ein Spiel auf vielen Geräten.

Spielorientierung

In dem vorherigen Tutorial habe ich über das gesprochen project.xml Datei, mit der wir viele Aspekte unseres Spiels einfach konfigurieren können. Unter anderem können wir die Ausrichtung des Spiels festlegen, was für mobile Geräte nützlich ist. Wenn wir zum Beispiel möchten, dass unser Spiel im Hochformat auf mobilen Geräten, im Querformat auf dem Desktop ausgeführt wird:


 

Eingabe und bedingte Kompilierung

Die Eingabe unterscheidet sich ziemlich stark zwischen den Gerätetypen. Es ist unvernünftig zu erwarten, dass der Spieler eine Bluetooth-Tastatur und eine Maus anlegt, um ein Spiel auf dem Handy zu spielen, und es ist auch heute noch unwahrscheinlich, dass ein Desktop mit einem Touchscreen ausgestattet ist.

In dem Beispielspiel aus dem vorherigen Tutorial habe ich HaxePunk verwendet Schlüssel Klasse, die auf Tastendruck überprüft werden soll. Bei Touchscreen-Geräten ist es jedoch sinnvoll, die Key-Klasse nicht zu importieren und die Größe des Spiels zu verringern, da wir die Touch-Steuerung verwenden.

Haxe macht uns dies leicht, indem wir die bedingte Kompilierung verwenden lassen. Es funktioniert so:

#if Bedingung var x = 0; someFunction (); #elseif other_condition var y = 1; #else var z = 2; andereFunktion (); #Ende

Die Bedingungen werden zur Kompilierzeit ausgewertet. Dies bedeutet, dass wir je nach Zielplattform Code ein- oder ausschließen können! Führen Sie einfach Folgendes aus, um die Schlüsselklasse bei der Ausrichtung auf mobile Geräte auszuschließen:

import com.haxepunk.utils.Input; // Sie werden dies wahrscheinlich immer noch wollen, da es Eingaben für alle Arten von Geräten verarbeitet. #if! mobile import com.haxepunk.utils.Key; #end // Wir möchten auch alle Tastaturdefinitionen entfernen, die wir haben könnten, zB #if! mobile Input.define ("left", [Key.A, Key.LEFT]); Eingabe.definieren ("rechts", [Key.D, Key.RIGHT]); #Ende

Beachten Sie die! (nicht) logischer Operator, der oben verwendet wurde. Wir können auch && (und) sowie || verwenden (oder) bei der bedingten Kompilierung. Wenn Sie Code für mobile Geräte einschließen möchten, nicht für iOS, können Sie sagen

#if (mobile &&! ios) // Code hier #ende

Wie Sie sehen, ist die bedingte Kompilierung ziemlich mächtig! Kehren wir für eine Minute zur Eingabe zurück. Wenn Sie die Key-Klasse beim Kompilieren von Zielen mit einem Touchscreen ausschließen, ist dies zwar nett, prüft jedoch nicht automatisch die Berührungseingabe. 

Am Beispiel des Rennspiels aus dem letzten Tutorial könnten wir die Eingabeprüfung folgendermaßen ändern:

if (Input.pressed ("left")) move ("left");  if (Input.pressed ("right")) move ("right"); 

Zu diesem:

#if mobile if (Input.mousePressed) if (Input.mouseX < HXP.screen.width * .5)  move("left");  else  move("right");   #else if(Input.pressed("left"))  move("left");  if(Input.pressed("right"))  move("right");  #end

Jetzt wird die Tastatur zur Steuerung von Bewegungen auf Desktop-Plattformen verwendet. Wenn Sie die linke oder rechte Seite des Bildschirms berühren, wird die Bewegung auf mobilen Plattformen gesteuert!

Wenn Sie möchten, können Sie auch eigene Schlüsselwörter für die bedingte Kompilierung angeben, sowohl im Quellcode des Spiels als auch in der XML-Projektdatei.

#if myOwnKeyword aCoolSecretForWhateverReason (); #Ende

Um den obigen Code einzufügen, können Sie beim Kompilieren einfach eine Option übergeben:

Kalk-Test  -DmyOwnKeyword

Dies kann verwendet werden, um Rezensionsexemplare oder Betaversionen als solche im Spiel selbst zu markieren, um Lecks zu verhindern oder verschiedene Teile des Spiels mit verschiedenen Personen zu testen. Es kann auch verwendet werden, um eine Demoversion zu erstellen, die Bereiche des Spiels einschränkt, oder sogar, um eine persönliche Version als Überraschungsgeschenk zu erstellen.

Senden an mehrere App Stores

Nachdem Sie ein großartiges plattformübergreifendes Spiel erstellt haben, müssen Sie es in verschiedenen App-Stores und auf Marktplätzen veröffentlichen. Jeder Marktplatz hat andere Anforderungen, aber es gibt Dinge, die Sie für alle (oder zumindest die überwiegende Mehrheit) von Marktplätzen anwenden können. Der beste Rat, den ich in diesem Bereich geben kann, ist natürlich, die Einreichungsanweisungen sorgfältig zu lesen, um herauszufinden, was jeder Marktplatz von Ihnen will.

Eine naheliegende Anforderung ist die Bereitstellung von Screenshots. Die Anzahl und die erforderliche Auflösung variieren, aber jeder Marktplatz sollte Ihnen sagen, was er will. Ich würde empfehlen, nicht weniger als zwei Screenshots bereitzustellen, vorzugsweise jedoch vier oder mehr.

Ebenso wie die Anforderungen für Screenshots variieren, werden auch die Anforderungen für Symbole unterschiedlich sein. In einigen Geschäften ist ein Symbol mit niedrigerer Auflösung und ein Symbol mit höherer Auflösung erforderlich. Daher sollten Sie am besten mit einem großen Symbol beginnen, das auf verschiedene Größen skaliert werden kann.

In einigen Geschäften können Sie auch ein oder mehrere Videos hochladen. Ich würde vorschlagen, ein Video zu erstellen, das die Grundlagen Ihres Spiels veranschaulicht, wenn Sie es an mobile App-Stores senden, und mindestens ein Video für andere Marktplätze (Steam, Desura usw.). Denken Sie daran: Wenn ein Bild mehr als tausend Worte wert ist und ein Video an eine Anzahl von Bildern in Folge gedacht wird, ist ein Video sehr wertvoll!

Es gibt auch mehrere Informationen, die für jedes Geschäft, in dem Sie ein Spiel einreichen, erforderlich sein sollten: Titel, Beschreibung, Symbol und Kategorie. Es ist hilfreich für Spieler (potenziell oder anderweitig), wenn diese Informationen auf allen Plattformen gleich sind.

Jetzt können Sie überall veröffentlichen

Nachdem Sie ein Spiel mit OpenFL erstellt haben, sollte die Binärdatei bereit sein, sich bei jedem Marktplatz für die Plattform einzureichen, für die Sie eine Plattform erstellt haben, ohne dass Änderungen erforderlich sind. Denken Sie daran, eine Release-Version zu erstellen und einzureichen, keine Debug-Version!

Nachdem Sie nun gesehen haben, wie Sie Ihre Spiele auf einer Vielzahl von Geräten gut funktionieren lassen, hoffe ich, dass Sie dieses Wissen gut einsetzen und ein paar coole Spiele machen! Ein letzter Ratschlag: Das Beenden eines Spiels ist großartig und etwas, worauf man stolz sein kann, aber die Veröffentlichung eines Spiels kann genauso viel Arbeit erfordern!