“Yo-ho-ho” -2 oder Transport von Sklaven und Leichen von Oppositionellen / Sudo Null IT News

Ich arbeite weiter an meinem Piraten-Browserspiel Three.js. Es ist Zeit, den Handel hinzuzufügen. Ich dachte, da wir hier ein Jahrhundert Piraten haben, sollte die Situation im politischen Sinne sehr leichtfertig sein, dh ohne blasphemische Demokratie. Warum schämen? Wir gehen zum Hafen, und dort wird uns, den Piraten, sofort angeboten, Kanonenkugeln zu kaufen und Aufträge für den Transport der Leichen von Oppositionellen und die Auslieferung von Sklaven auszuführen. Sie können den Rum auch nach Tortuga bringen oder die Tochter des Gouverneurs zu einer Party auf Paradise Island schmeißen. Oder einen flüchtigen Gouverneur für einen guten Preis heimlich evakuieren. Tatsächlich ist es für die Regierung in solchen Fällen ideal, Piraten einzusetzen. Am Ende werden die Sklaven selbst kein Ticket für einen regulären Flug kaufen, und die Oppositionellen werden sich nicht begraben. Und das Problem muss gelöst werden … Kurz gesagt, der Transport von Holz und Seide wie in gewöhnlichen Spielen ist langweilig. Lass es eine Art “Neunziger” geben, aber im Zeitalter der Piraten. Piraten erfüllen nicht ganz legale Aufgaben der Regierung, und diese verschließt die Augen vor ihren nicht ganz legalen Methoden der Bereicherung.

Was für Geschäftsleute, solche Geschäfte ...Was für Geschäftsleute, solche Geschäfte …

Das Spiel hat eine lokale Zeitung. Das Abonnement ist für Piraten kostenlos. Die Zeitung enthält verschiedene Ankündigungen im Spiel.

Eine interessante Nuance

In Stellenangeboten in Häfen gibt es Bewerbungen für den Transport von einer Insel zur anderen von einigen Agenten X und Lord Napalny. Wenn Sie Agent X transportieren, findet einige Zeit später auf der Insel, auf der er ankam, ein gebieterischer Putsch statt, und der Hafen erhält die Aufgabe, den flüchtigen Gouverneur zu transportieren. Natürlich nicht kostenlos. Wenn Sie Lord Napalny transportieren, erscheint wenig später im Hafen seiner Ankunft ein Auftrag, um die Leichen der Oppositionellen zu entfernen, ebenfalls gegen eine Gebühr. Und so werden diese beiden über die Inseln reisen und neue Arbeit für uns schaffen. Und die Information, dass irgendwo ein Aufstand oder ein Putsch stattgefunden hat, wird in The Pirate Times erscheinen. Visuell – Ändern Sie die Farbe des Nachrichtensymbols. Sie können öffnen und lesen. Nun, gehen Sie für die Aufgabe zum gewünschten Port. Transportieren Sie diese beiden nur nicht gleichzeitig auf dieselbe Insel.

Kommentar. Noch sind nicht alle Inseln fertig. Einige von ihnen sind ein Stück Land, eine Palme und ein Pier. Später, während der Erstellung von Missionen, werden sie zu vollwertigen Schauplätzen.

Was für Zeiten, solche Nachrichten...Was für Zeiten, solche Nachrichten…

Eine weitere äußerst wichtige Nachricht. Aus der Black Pearl wurde die Black Oyster. Ja. Ja, auf jeden Fall besser. Weil ich Künstlerin bin, sehe ich das so.

“Unser Team”

Ich sprach über unser Produkt. Jetzt – über unser freundliches Team, über unsere Werte und unseren Unternehmensgeist … Okay, nur ein Scherz. Ich mache das Spiel alleine. Und um die Motivation nicht zu verlieren, bin ich an diesen heißen Tagen auch mal an die Küste des Finnischen Meerbusens zur Arbeit gefahren. Und ich muss sagen, die Stille und Glätte und manchmal das Rauschen des Meeres haben mich gut motiviert, ein Spiel über Seeräuber zu schreiben. Hier ist mein Büro.

Unsere Büro- und UnternehmenswerteUnsere Büro- und Unternehmenswerte

Und dann hat es mich erwischt…

Wenn ich ein Spiel mache, fängt es normalerweise mit der Atmosphäre an. Hier lässt sich jemand von einer erfundenen Geschichte inspirieren und erschafft einen Visual Novel, jemand ist die Hauptfigur und schreibt ein Spiel über Superman, jemand ist kommerziell motiviert und verteilt einen Clicker an ein Handy. Und ich bin von der Atmosphäre inspiriert. Vielleicht ist es dumm, aber die Atmosphäre im Spiel ist für mich das Wichtigste. Ich mag zum Beispiel keine Shooter, aber wenn es einen unglaublich schönen Ort und eine interessante lebendige Welt gibt, dann werde ich höchstwahrscheinlich von diesem Spiel fasziniert sein und anfangen, es zu spielen. Und das gilt für alle Genres. Und umgekehrt, wenn meine Lieblings-Rennspiele hässliche Grafiken, unangenehme Steuerungen oder etwas anderes haben, was mir nicht gefällt, dann werde ich es definitiv nicht spielen, obwohl mir dieses Genre grundsätzlich nahe steht. Das Spiel über Piraten begann also damit, dass ich eine einfache Szene zusammenstellte, die aus Wasser, Himmel und einem bewegungslosen Boot besteht. Ich mochte die Art, wie es aussieht. Und erst dann begann ich darüber nachzudenken, wie ich daraus ein Spiel machen könnte. „Das Schiff ist Freiheit. Traust du dich? Wenn ein Schiff Piraten, Inseln, Missionen bedeutet, haben Sie die Idee … Ideen kamen, während wir arbeiteten. Ich verstehe, dass das falsch ist, aber ich tue es für mich selbst und vielleicht für diejenigen, denen es auch gefallen wird. Fragen Sie nicht einmal nach dem Disdoc: Ich habe immer noch keine Ahnung, was die nächste, vierte von acht Missionen sein wird.

Mehr zur Optimierung

Nun – darüber, welche anderen Momente ich optimieren konnte. Ich habe dieses Thema in meinem vorherigen Artikel begonnen. Ich werde fortsetzen.

Reflexionen

Wie Sie verstehen, gibt es im Spiel viel Wasser. Buchstäblich. Nun, nein, das ist kein echtes Wasser, aber es gibt eine Textur, Shader, okay … Eigentlich ist dies die Hauptoberfläche aller Orte. Und alles, was an Land ist, spiegelt sich im Wasser. Tatsächlich wird die ganze Szene wieder im Wasser gerendert. Ich dachte, ist es möglich, nicht die gesamte Szene zu spiegeln, sondern nur einzelne Objekte? Um ehrlich zu sein, wusste ich nichts über three.js-Layer. Eine freundliche Person wies mich auf Informationen über sie in einem Profilkanal in einem Messenger hin, wo ich nach einer Antwort auf meine Frage suchte. Das Prinzip ist ganz einfach:

// Hauptkamera sieht alle Ebenen bis 1 (0, 1) camera.layers.enable (1); // Spiegelkamera sieht nur Ebene 1 mirrorCamera.layers.set (1); //Objekt 1 ist in allen Ebenen bis 1 (0, 1) sichtbar, //also in der Hauptkamera und im Spiegel object1.layers.enable(1); //Objekt 2 ist nur in Ebene 0 sichtbar, //d. h. sichtbar in der Hauptkamera, aber nicht sichtbar in der Reflexion object2.layers.set(0);

Auf diese Weise kann die Reflexion einzelner Objekte im Wasser ausgeschlossen werden. Darüber hinaus können Sie sogar an separaten Netzen eines Objekts arbeiten. So müssen beispielsweise diverse Kleinigkeiten, die hinter den Wasserkräuseln noch nicht sichtbar sind, nicht mehr reflektiert werden. Oder sie befinden sich generell im Inneren des Modells und müssen auch gar nicht erst in einer „Spiegelreflex“-Kamera bearbeitet werden. Die Layer-Eigenschaft existiert sowohl im Stammobjekt als auch in jedem seiner Meshes.

Einige der Schiffstaue spiegeln sich nicht im WasserEinige der Schiffstaue spiegeln sich nicht im Wasser

Und um nicht alle Meshes aller Objekte manuell durchgehen zu müssen, um deren Spiegelungen im Wasser zu erzeugen oder nicht zu erzeugen, habe ich mich entschieden, den Mesh-Namen direkt im 3D-Editor Steuerzeichen hinzuzufügen. Beispielsweise heißt eines der Schiffsnetze “mrd_flo”. Hier ist “flo” floor (von floor), nur ein beliebiger Name, dem eine Reihe von Steuerzeichen vorangestellt sind, die durch einen Unterstrich getrennt sind. Zum Beispiel „m“ (Spiegel) – Reflexionen in Spiegeln entfernen, „r“ (Schatten empfangen) – Schatten akzeptieren: Schatten von anderen Objekten sollen auf den Boden geworfen werden, „d“ (Doppelseite) – zweiseitig: dies Der Boden sollte wie oben vom Deck und unten von der Kabine aus sichtbar sein. Das andere Netz heißt “md_wire”. „Draht“ ist hier nur ein Name (Seil), „md“ spiegelt sich nicht im Wasser und sein Material ist zweiseitig. Iteriert beim Laden jedes 3D-Modells über die Namen der Netze und legt zuletzt alle erforderlichen Eigenschaften fest.

Kollision von Kernen mit Wänden

In der vorherigen Version des Spiels wurden beim Schießen Kollisionen von Kernen mit den Objekten, die sie treffen können, überprüft. Dies sind andere Schiffe, Kanonen, verschiedene Ziele am Ufer. Tatsächlich habe ich früher eine nützliche Fähigkeit implementiert, um Kollisionen des Kerns nicht mit allen Zielen in der Szene zu überprüfen, sondern nur mit denen, die sich in der Nähe des fliegenden Kerns befinden, und die Liste der nahe gelegenen Objekte während des Flugs neu zu erstellen. Jetzt ist es einfach, die Collider der umliegenden Felsen zu dieser Liste hinzuzufügen. Es gibt viele von ihnen an dem Ort, aber es werden immer 2-3 dem Kern am nächsten sein. Es ist nicht leistungskritisch. Aber jetzt fliegen die Kerne nicht durch die Felsen.

Speichern des Spiels

Jetzt kann das Spiel gespeichert und beim nächsten Öffnen des Browsers fortgesetzt werden. Die Informationen werden im lokalen Speicher gespeichert. Aber Vorsicht: Wenn Sie den Browser-Cache komplett löschen (und nicht nur die letzten Dateien), dann geht das Speichern verloren.

Gamepad

In Desktop-Browsern wird die Gamepad-Steuerung jetzt unterstützt, allerdings ist es noch nicht möglich, Tasten neu zuzuweisen.

Diverse Kleinigkeiten

Ich habe einige der Kommentare zum Spiel berücksichtigt, die in den Kommentaren zum vorherigen Artikel hinterlassen wurden. Nun wird die Richtung der Schiffsbewegung auf der Karte durch einen Pfeil angezeigt. Verbesserter Kernverfolgungsalgorithmus beim Schießen. Eine visuelle Nachladeanzeige für Geschütze wurde hinzugefügt. Verbesserte Steuerung für Mobilgeräte. Der Pfeil am oberen Rand des Bildschirms zeigt jetzt auf das Bewegungsziel relativ zum Rotationswinkel des Schiffs, nicht zum Rotationswinkel der Kamera. Jetzt können Sie zum Missionsauswahlmenü zurückkehren und sich das Briefing der aktuellen Mission noch einmal ansehen. Eine dritte Mission wurde in Matthew Town hinzugefügt.

Erstaunliche Entdeckungen

Bei der Interaktion mit der Three.js-Bibliothek entdeckte ich interessante Nuancen.

1. Hintergrund für Safari.

In Apple Safari muss die Leinwand, auf der 3D-Grafiken angezeigt werden, auf eine Hintergrundfarbe eingestellt werden:

scene.background=neu DREI.Color(0x000000);

Andernfalls wird der alte Rahmen beim Rendern möglicherweise nicht gelöscht und die Objekte hinterlassen Spuren.

2. Beim Laden eines Objekts ändert sich das Material, wenn es eine Textur enthält.

Nach dem Laden der Textur ersetzt Three.js das Material, an dem die Textur tatsächlich befestigt ist. Ich konnte lange Zeit nicht verstehen, warum ich das Material nicht per UUID programmatisch einrichten kann, wenn es bereits geladen und im Modell vorhanden ist. Ändern Sie beispielsweise seine Farbe oder Helligkeit oder etwas anderes. Es scheint, dass das Material erscheint, Sie können die Werte darin ändern, aber der Effekt ist nicht sichtbar. Es stellte sich heraus, dass ich ein altes Material eingerichtet habe, das sich löst, sobald die Textur geladen wird. Und damit wird ein neues Material erstellt und anstelle des alten an das Modell angehängt. Die Lösung besteht darin, die Materialeigenschaften erst zu ändern, nachdem die Textur geladen wurde.

3. Willkürliche Anordnung von Maschen in komplexen Objekten

Mehrmals habe ich beobachtet, wie die Einstellung, die ich programmatisch für ein Mesh gesetzt habe, nicht auf dieses, sondern auf ein ganz anderes angewendet wurde. Das liegt daran, dass ich Folgendes getan habe:

Objekt.Kinder[5].material.glanz = 0,5;

Es stellt sich heraus, dass das Mesh, für das Sie einige Parameter festlegen möchten, beim nächsten Laden der Szene nicht unbedingt dieselbe Seriennummer haben wird (fünf wie im Beispiel). In den Kindern eines 3D-Objekts kann es absolut alles werden. Ich weiß nicht, ob das daran liegt, dass Three.js die Objekte in Teilen lädt und sie zu Kindern hinzufügt, oder etwas anderes, aber Tatsache ist, dass sich manchmal (nicht immer, sogar sehr selten) die Reihenfolge ändert. Die Lösung besteht darin, nach dem Namen des Kindes zu suchen, nicht nach dem Index. Dementsprechend müssen Sie beim Erstellen eines Modells im Editor vorher darauf achten, jedem Mesh einen eindeutigen Namen zu geben. Zum Parsen musste ich eine Funktion der Form schreiben:

getObjectChildByName(object, ‘Meshname’).material.shininess=0.5;

Wir schwimmen weiter

Ich habe noch nicht viel darüber nachgedacht, wie ich das Spiel promoten werde. Ich habe es auf einigen Seiten (Shops) gepostet, wo Browsergames gehostet werden können. Es ist möglich, eine ausführbare Datei zu erstellen, um sie in Shops wie Steam zu stellen. Mehr kann ich zu diesem Thema nicht sagen. Allerdings ist der Release noch weit entfernt.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *