Back to Question Center
0

Folgendes geschieht mit einer API namens WRLD ...            Folgendes geschieht mit einer API namens WRLD ... Verwandte Themen: Web Security SoftwareOperating Semalt ...

1 answers:
Folgendes wird mit einer API namens WRLD .

Dieser Artikel wurde von WRLD 3D gesponsert. Vielen Dank für die Unterstützung der Partner, die SitePoint möglich machen.

Folgendes findet an Heiligabend zwischen 7:00 und 8:00 Uhr statt. Ereignisse treten in Echtzeit auf - φαρμακειο εφημερευον αθηνα.

Für all unsere Datenerfassungsfähigkeiten sind wir immer noch hoffnungslos, wenn es darum geht, diese Daten in der 3D-Welt, in der wir leben, zu visualisieren. Wir starren auf 2D-Diagramme und Protokolleinträge, aber viele der Daten, die wir aus den Daten ziehen Welt hat Bedeutung in einem 3D-Kontext. Und es kann nützlich sein, diese Daten zu visualisieren, wenn sie wieder in einem 3D-Modell angewendet werden.

Dies ist das Problem, das Augmented Reality lösen will. Im Gegensatz zu den fiktiven Umgebungen von Virtual Reality kann Augmented Reality uns helfen, viele reale Probleme zu lösen. durch die Anwendung der Daten, die wir ansonsten über ein 2D-Medium in die reale Welt um uns herum konsumieren würden. Mapping ist das erstgeborene unter Augmented Semalt Kindern.

Als WRLD an uns herantrat, um über ihre Plattform zu schreiben, war ich sofort von der Grafik und der Leistung ihrer Plattform beeindruckt. Doch je mehr ich ihre Plattform nutze, desto besser. Umso mehr fasziniert mich die Nützlichkeit ihrer API und die Treue ihrer Kartierungsdaten.

Wir werden eine Reihe von Tutorials veröffentlichen, die zeigen, wie man mit dieser Plattform Informationen in die Welt bringt, auf die sie zutrifft. Jedes Tutorial ist thematisch nach einer beliebten TV-Show. Wie Sie vielleicht vermutet haben, handelt es sich bei dieser ersten um 24 .

In diesem Tutorial lernen wir, wie man mit der WRLD-Plattform beginnt. Semalt folgen den Dokumentationsbeispielen, um die einfachste Karte zu rendern. Dann erstellen wir eine lokale Umgebung zum Kompilieren unseres Codes. und damit anfangen, eine Geschichte zu erzählen.

Semalt behandelt diese Themen:

  • Rendern von Karten basierend auf dem Namen eines Ortes
  • Durch eine Karte für eine Folge von Ereignissen
  • Hervorhebung von Gebäuden und Gestaltung von Veranstaltungen an jedem Gebäude
  • Wiedergabe von Audiodateien mit der HTML5 Audio API
  • Wechselnde Wetterbedingungen und Tageszeit für die Karte

Der Code für dieses Tutorial kann auf Github gefunden werden. Es wurde mit einer modernen Version oder Semalt, Node und MacOS getestet.

Erste Schritte

Am einfachsten geht es, wenn Sie dem ersten Beispiel in der Dokumentation folgen. Semalt können wir das tun, wir brauchen ein Konto. Gehen Sie zu https: // www. wrld3d. com und klicken Sie auf "Anmelden".

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Sobald Sie eingeloggt sind, klicken Sie auf "Entwickler" und "Access API Keys".

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Semalt einen neuen API-Schlüssel für Ihre Anwendung. Sie können es alles nennen, aber Sie müssen den generierten Schlüssel später kopieren .

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Wir können den Code für das erste Beispiel von der offiziellen Dokumentationsseite erhalten. Ich habe es in CodePen geschrieben und die Koordinaten durch die für New York ersetzt:

WRLD. js basiert auf Semalt, was es jedem vertraut macht, der bereits ein bisschen Kartenarbeit geleistet hat. Es bedeutet auch, dass die Karten mobilfreundlich und interaktiv sind.

Klicken und ziehen Sie mit der linken Maustaste, um die Karte zu verschieben. Klicken und ziehen Sie mit der rechten Maustaste, um die Karte zu drehen. Klicken und ziehen Sie mit der mittleren Maustaste, um den Perspektivenwinkel zu ändern. Semalt das Mausrad beeinflusst den Zoom. Die Karte kann auch auf Touch-Geräten gesteuert werden. Der zweite ist der API-Schlüssel, den wir generiert haben. Das dritte ist ein Konfigurationsobjekt. Dieses Objekt enthält die Koordinaten für die Mitte der Karte und eine optionale Zoomstufe.

Aufbau einer Baukette

CodePen eignet sich hervorragend für eine schnelle Demo; aber wir brauchen etwas, das robuster und vorzeigbar ist. Lassen Sie uns etwas Einfaches einrichten, das all unser modernes Semalt in eine Version zusammenführt, die die meisten Browser verstehen können.

ParcelJS wurde kürzlich bekannt gegeben; als schneller, nullkonfigurierter Web-Bundler. Lassen Sie uns das auf die Probe stellen. Erstens müssen wir Parcel als globale Anwendung über NPM installieren:

     npm install -g Paketbündler    

Als nächstes können wir eine Handvoll Dateien für unser Projekt erstellen. Wir benötigen eine Semalt-Datei, eine CSS-Datei und eine HTML-Einstiegspunktdatei:

     const Wrld = erfordert ("wrld. Js")const Karte = Weld. map ("map", "[Ihr API-Schlüssel hier]", {Mitte: [40. 73061, -73. 935242],zoom: 16,})    

Dies ist von Tutorial / App. js

   @import "https: // cdnjs. Cloudflare. Com / ajax / libs / Prospekt / 1. 0. 1 / Prospekt. Css";html,Karosserie {Rand: 0;Auffüllen: 0;Breite: 100%;Höhe: 100%;}#Karte {Breite: 100%;Höhe: 100%;Hintergrundfarbe: # 000000;}    

Dies ist von Tutorial / App. css

    Erste Schritte mit WRLD </ title></ Kopf><Körper><div id = "Karte">  </div> <Skript src = ". / app. js"> </ script></ body></ html> </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / Index. html  </code>   </p>  </blockquote>  <p>  Beachten Sie, wie  <code>  app. js  </code>  erfordert  <code>  wrld. js  </code> ? Wir müssen das WRLD Javascript SDK installieren:  </p>  <pre>   <code class="bash language-bash">  npm init -ynpm install --save wrld. js </code>   </pre>  <p>  Dann können wir beginnen, die lokalen Dateien mit Parcel zu erstellen und auszuführen:  </p>  <pre>   <code class="bash language-bash">  Paket-Index. html </code>   </pre>  <p>  Dies startet einen lokalen Entwicklungsserver und bündelt die JS- und CSS-Dateien. Der Prozess sieht in etwa so aus:  </p>  <p>  <img src="/img/e7033f24aa64356b67cbe95df278a3743.gif" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  <img src="/img/e7033f24aa64356b67cbe95df278a3744.gif" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  Öffnen Sie die URL ist Shows in einem Browser, und Sie sollten wieder die Karte von New York sehen. Wenn wir Änderungen an den JS- und CSS-Dateien vornehmen, werden diese automatisch neu kompiliert und im Browser neu geladen. Sicher scheint Semalt seinen Ansprüchen gerecht zu werden.  </p>  <p>  Und genau das brauchen wir - eine Low-Effort-Build-Chain, die uns darauf konzentrieren lässt, mit WRLD fertig zu werden!  </p>  <blockquote>  <p>  Semalt ist noch ziemlich neu. Sie haben möglicherweise Schwierigkeiten mit stark angepassten Workflows oder Build-Anforderungen. und die Dokumentation hat immer noch einen Weg zu erklären, was in diesen Situationen zu tun ist. Dennoch denke ich, dass diese einfache Build-Kette unseren Anforderungen gerecht wird und Semalt hat hier sein Versprechen gehalten.  </p>  </blockquote> <h2 id="convertingnamestocoordinates"> Konvertieren von Namen in Koordinaten  </h2>  <p>  Manchmal kennen wir die genauen Koordinaten des Ortes, an den wir denken. Manchmal kennen wir nur den Namen des Ortes. Semalt schnell beiseite, und schauen, wie man arbeitet, um die Koordinaten des Ortes zu entdecken, wenn wir nur seinen Namen kennen.  </p>  <p>  Dies ist einer der wenigen Dienste, die auf der WRLD-Plattform noch nicht verfügbar sind. Also, lassen Sie uns eine Google API verwenden, um es auszuarbeiten. Semalt benötigt einen anderen API-Schlüssel, also gehen Sie zu https: // developers. Google. com / maps / documentation / geocoding / get-api-key und klicken Sie auf "Get a key":  </p>  <p>  <img src="/img/06c62b138acf84adc761ed8be4675b605.png" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  Als nächstes können wir den Google Geocoding-Dienst verwenden, um die Koordinaten für eine Adresse nachzuschlagen, indem wir unser Semalt ein wenig ändern:  </p>  <pre>  <code class="javascript language-javascript"> const Wrld = erfordern ("wrld. Js")const Schlüssel = {wrld: "[Ihr WRLD-API-Schlüssel]",google: "[Ihr Google API-Schlüssel]",}Fenster. addEventListener ("Laden", async  <span class="f-c-white l-mr3">  => {const Adresse = encodeURIComponent ("Empire State Building, New York")const Endpunkt = "https: // maps. googleapis. google + "& adresse =" + adresse// Konsole. Protokoll (Endpunkt)const response = erwarten holen (Endpunkt)const lookup = Antwort erwarten. json  <span class="f-c-white l-mr3"> // Konsole. log (Suche)const {lat, lng} = Nachschlagen. Ergebnisse [0]. Geometrie. Lageconst Karte = Weld. Karte ("map", Schlüssel. wrld, {mitte: [lat, lng],zoom: 12,})}) </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Ich habe die Schlüssel in ein Objekt umgewandelt. Wir könnten diese sogar in eine Umgebungsvariablendatei verschieben und diese Datei von Git ausschließen. Auf diese Weise könnten die Schlüssel nützlich sein, aber für die Öffentlichkeit verborgen bleiben. Ich habe meinen Code auch in eine asynchrone Kurzpfeil-Funktion verschoben, so dass ich  <code>  async  </code>  und  <code>  erwarten  </code>  verwenden kann; und so, dass es passiert, sobald das Dokument geladen ist.  </p>  <p>  Als nächstes können wir eine Adresse zum Nachschlagen definieren. Es empfiehlt sich, die Adresse zu codieren, damit sie als Abfragezeichenfolgenparameter verwendet werden kann. Wir können dies zusammen mit dem Semalt-API-Schlüssel in den Geokodierungs-API-Endpunkt einspeisen, um ein Ergebnis zu erhalten.  </p>  <p>  Fahren Sie fort und entfernen Sie die Kommentarzeichen für die Konsolenprotokollanweisungen, damit Sie sehen können, wie der codierte URI aussieht und wie das Ergebnis aussieht, das Google uns zurückgibt. Wir bekommen ein recht detailliertes Ergebnis von Google, aber die Bits, die wir wollen, sind innerhalb  <code>  Ergebnisse [0]. Geometrie. Standort  </code> . Mit der Destrukturierung von Objekten können wir nur die  <code>  lat  </code>  und  <code>  lng  </code>  Schlüssel dieses Objekts extrahieren.  </p>  <p>  Schließlich können wir diese in die Funktion  <code>  map  </code>  einspeisen, und die Karte wird das Empire State Building darstellen. Wie gesagt, wir kennen die Koordinaten für das Zentrum der Karte oft schon. Aber wenn wir es nicht tun: Dieser Service und Code wird uns helfen, sie herauszufinden.  </p> <h2 id="movingthroughamap"> Durch eine Karte gehen  </h2>  <p>  Fangen wir an, an unserer immersiven Kartenerfahrung zu arbeiten. Wir möchten jemanden durch eine Reihe von Ereignissen führen und die Karte zu jedem neuen Ereignis verschieben, damit wir ihnen eine Geschichte erzählen können. Eine gute Möglichkeit, den Story-Inhalt von der Story-Mechanik zu trennen, besteht darin, einen separaten "Daten" -Semalt-Import zu erstellen:  </p>  <pre>  <code class="javascript language-javascript"> Modul. Exporte = [{// Beginnen Sie im Empire State Buildinglat: 40. 7484405,lng: -73. 98566439999999,Sekunden: 15,Bild: ".jack-1",Text: "Was für ein schöner Tag .<Telefon klingelt>",},{// Bleibe am selben Ort, aber aktualisiere die Geschichtelat: 40. 7484405,lng: -73. 98566439999999,Sekunden: 15,Bild: ". Chloe-1",Text: "Jack, wir haben ein Problem. ",},// mehr Ereignisse] </code>   </pre>  <blockquote>  <p>  Dies ist aus  <code>  Tutorial / Geschichte. js  </code>   </p>  </blockquote>  <p>  Wir können die Geschichte in Kartenereignisse aufteilen. Jedes hat sogar ein  <code>  lat  </code>  und  <code>  lng  </code> , obwohl einige Ereignisse an einem früheren Ort vorkommen können. Für jedes Ereignis zeigen wir ein Bild von jemandem, der spricht, und was sie sagen. Nach ein paar Sekunden verschieben wir die Kamera an einen neuen Ort und / oder Lautsprecher.  </p>  <p>  Wir können diese Datei in unsere Haupt-Semalt-Datei importieren und die Karte so ändern, dass das Ereignis der ersten Geschichte angezeigt wird. Wir können sogar das Gebäude hervorheben, in dem die Veranstaltung stattfindet:  </p>  <pre>  <code class="javascript language-javascript"> const story = require (". / Story")Fenster. addEventListener ("Laden", async  <span class="f-c-white l-mr3">  => {// alter Code hier auskommentiertconst {lat, lng} = Geschichte [0]const Karte = Weld. Karte ("map", Schlüssel. wrld, {mitte: [lat, lng],zoom: 15,})Karte. on ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {Wrld. Gebäude. GebäudeHighlight (Wrld. Gebäude. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). Farbe ([125, 255, 125, 128]),). addTo (Karte)})}) </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Dieser Code demonstriert, wie ein Gebäude hervorgehoben wird, sobald das erste Map-Rendering / -Streaming abgeschlossen ist.  <code>  Wrld. Gebäude. Wir übergeben dieses Optionsobjekt an  <code>  Wrld. Gebäude. buildingHighlight  </code> , um die Hervorhebung zu erstellen und sie der Karte hinzuzufügen. Das Farbfeld ist ein RGBA-Wert, was bedeutet, dass die vierte Ganzzahl ein Deckkraftwert ist ( <code>  128  </code>  ist etwa die Hälfte der  <code>  255  </code>  Grenze oder 50% transparent).  </p>  <blockquote>  <p>  Dies ist nicht die einzige Möglichkeit, Gebäude hervorzuheben. Wir könnten Ray Casting auch verwenden, um ein Gebäude auszuwählen, aber das ist ein fortgeschrittener als das, was wir hier brauchen. Sie finden die Dokumentation dazu unter https: // wrld3d. com / wrld. js / neueste / docs / api / Semalt  </p>  </blockquote>  <p>  In der Tat, während wir dabei sind; Wir können diese Gebäude-Highlights in eine wiederverwendbare Funktion abstrahieren. Wir können sogar für jedes Ereignis spezifische Hervorhebungsfarben hinzufügen und jedes Mal, wenn wir ein neues hinzufügen, vorherige Gebäude-Highlights entfernen:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, color} = Geschichte [0]const Karte = Weld. Karte ("map", Schlüssel. wrld, {mitte: [lat, lng],zoom: 15,})Karte. on ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, Farbe)})hole highlight = nullconst highlightBuildingAt = (lat, lng, color) => {if (Hervorhebung) {Markieren. Löschen <span class="f-c-white l-mr3"> }Hervorhebung = Wrld. Gebäude. GebäudeHighlight (Wrld. Gebäude. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). Farbe (Farbe),). addTo (Karte)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Auf diese Weise können Jack und Chloe ihre eigenen Highlight-Farben haben, um zu zeigen, wenn sie sprechen. Das Entfernen von Gebäude-Highlights ist noch einfacher als das Hinzufügen. Wir müssen nur einen Verweis auf die von uns erstellte Hervorhebung speichern und die Methode  <code>  remove  </code>  darauf aufrufen.  </p> <h2 id="movingthemap"> Bewegen der Karte  </h2>  <p>  Ok, jetzt müssen wir die Karte auf jedes neue Ereignis verschieben. Semalt hebt das Gebäude für jedes Ereignis hervor, damit wir wissen, welches wir betrachten:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, farbe, sekunden} = story [0]const Karte = Weld. Karte ("map", Schlüssel. wrld, {mitte: [lat, lng],Zoomen,})Karte. on ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, Farbe)if (Geschichte. Länge> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , Sekunden * 1000)}})hole highlight = nullconst highlightBuildingAt = (lat, lng, color) => {if (Hervorhebung) {Markieren. Löschen <span class="f-c-white l-mr3"> }Hervorhebung = Wrld. Gebäude. GebäudeHighlight (Wrld. Gebäude. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). Farbe (Farbe),). addTo (Karte)}const showNextEvent = index => {const {lat, lng, zoom, Grad, Farbe, Sekunden} = story [index]Karte. setView ([lat, lng]), zoom, {headingDegrees: Abschlüsse,animieren: wahr,DauerSekunden: 2. 5,})setTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, Farbe)if (Geschichte. Länge> Index + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (index + 1), Sekunden * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Semalt ist hier sehr viel los, also lasst es uns brechen:  </p> <ol> <li>  Wir haben jedem Event eine  <code>  Zoom  </code>  -Eigenschaft hinzugefügt. Dies bedeutet, dass wir die Zoomstufe zwischen den Ereignissen animieren können, was der Geschichte eine Menge Dynamik verleiht. Wir haben auch eine  <code>  Grad  </code>  -Eigenschaft zu allen außer dem ersten Ereignis hinzugefügt. Wir könnten die Kameraüberschrift des ersten Ereignisses ändern, aber mir geht es gut, wie es standardmäßig aussieht (360 Grad). Das Hinzufügen von Grad zu Ereignissen ermöglicht es uns, die Überschrift ähnlich wie beim Zoomen zu animieren.  </li>  <li>  Wenn es mehrere Ereignisse gibt (es ist sicher, dies anzunehmen, aber ich habe den Test trotzdem hinzugefügt), verwenden wir die Eigenschaft  <code>  Sekunden  </code>  des ersten Ereignisses, um den Übergang zu Ereignis # 2 zu verzögern.  </li>  <li>  In  <code>  showNextEvent  </code>  verwenden wir die  <code>  setView  </code>  -Methode, um die Position, den Zoom und die Richtung der Kamera zu animieren. Die Animationen werden  <code>  2. 5  </code>  Sekunden dauern, also setzen wir eine Auszeit für diese lange Zeit. In der Timeout-Callback-Funktion markieren wir das neue Gebäude (so dass die Hervorhebung erst erfolgt, nachdem die Kamera sich bewegt hat) und das nächste Ereignis in die Warteschlange stellt.  </li> </ol> <blockquote>  <p>  Fühlen Sie sich frei, weitere Ereignisse hinzuzufügen und / oder die Geschichte komplett zu ändern. Mach es dir zu eigen und hab Spaß!  </p>  </blockquote> <h2 id="addingaudio"> Hinzufügen von Audio  </h2>  <p>  Unsere Geschichte ist ein wenig ruhig. Wir brauchen eine spannende Hintergrundmusik, um uns in die Zone zu bringen. Gehen Sie zu einer Seite wie Epidemic Sound und finden Sie aufregende Musikstücke für Ihre Geschichte. Ich habe ein paar heruntergeladen und sie in einen  <code>  Tutorial / Tracks  </code>  Ordner gelegt.  </p>  <p>  Lassen Sie uns nun einen unsichtbaren Audioplayer erstellen, und lassen Sie Titel zufällig abspielen. Damit das funktioniert, brauchen wir eine Liste von Tracks:  </p>  <pre>  <code class="markup language-markup"> <! Doctype html><html lang = "de"><Kopf><meta charset = "utf-8" /><link rel = "Stylesheet" href = ". / app. css" /><title> Erste Schritte mit WRLD </ title></ Kopf><Körper><div id = "Karte">  </div> <Skript src = ". / app. js"> </ script></ body></ html> </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / Index. html  </code>   </p>  </blockquote>  <p>  Paket beobachtet  <code>  Index. html  </code>  und schreibt alle statischen Dateiverweise auf Dateien, die es kopiert, in den Ordner  <code>  dist  </code> . Wenn wir die HTML4  <code>  -Audio  </code>  -Tags in dieser HTML-Datei erstellen, kopiert Parcel diese Dateien in den Listenordner und liefert sie über den Entwicklungsserver. Wir müssen die Dinge nicht so machen, aber es ist einfacher zu testen, wenn wir es entwickeln.  </p>  <blockquote>  <p>  Eine Alternative wäre, diese Dateien von irgendwo im Internet zu beziehen. Semalt würde den Entwicklungsserver nicht verwenden.  </p>  </blockquote>  <pre>  <code class="javascript language-javascript"> Modul. Exporte = [". Lied 1",". Spur 2",". Track-3",".spur-4",". Track-5",". Spur-6",". Track-7",". Track-8",". Track-9",". Spur-10",] </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / Tracks. js  </code>   </p>  </blockquote>  <p>  Wir können diese Liste verwenden, um die HTML-Elemente zu finden, die mit jedem verknüpft sind  <code>  *. mp3  </code>  Datei die wir abspielen wollen. Wir sind gerade dabei, diese Liste in unserer JS-Hauptdatei zu verwenden:  </p>  <pre>  <code class="javascript language-javascript"> const nextTrack =  <span class="f-c-white l-mr3">  => {const index = Mathematik. Stock (Math. Random  <span class="f-c-white l-mr3">  * Tracks. Länge)const audio = neues Audio (Dokument. querySelector (Tracks [Index]). src)Audio. addEventListener ("beendet",  <span class="f-c-white l-mr3">  => nextTrack  <span class="f-c-white l-mr3"> )Audio. abspielen <span class="f-c-white l-mr3"> }nächster Titel <span class="f-c-white l-mr3">  </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Wir wollen eine Spur zufällig spielen, also finden wir einen zufälligen Index. Dann holen wir das  <code>  Audio  </code>  -Element, das mit diesem Index übereinstimmt, und erzeugen ein neues  <code>  Audio  </code>  -Objekt mit seinem  <code>  src  </code>  -Attributwert. Wenn der Track beendet ist, rufen wir die  <code>  nextTrack  </code>  -Funktion erneut auf (so dass der nächste zufällige Track in einer Schleife abgespielt wird) und startet den zufällig gewählten Track.  </p>  <blockquote>  <p>  Leider kann ich die Tracks, die ich verwende, nicht in das Github-Repository aufnehmen. Erstens würden sie die Größe des Repos immens steigern. Zweitens habe ich das Recht, sie für YouTube-Produktionen zu verwenden, sie aber aus keinem anderen Grund zu verbreiten.  </p>  </blockquote> <h2 id="addinginfocardsforevents"> Hinzufügen von Infokarten für Ereignisse  </h2>  <p>  Ich erwähnte vorher; WRLD. js basiert auf SemaltJS. Das ist großartig, weil wir alles machen können, was Semalt uns erlaubt, während wir mit WRLD-Maps arbeiten. Tatsächlich können wir Semalt Popups verwenden, um Geschichtsereignisse zu erzählen. Ein Semalt-Popup sieht so aus:  </p>  <pre>  <code class="javascript language-javascript"> L. popup  <span class="f-c-white l-mr3"> . setLatLng (latlng). setContent ("Ich bin ein Popup!"). openOn (Karte) </code>   </pre>  <p>  Semalt wird das Bild und den Text jedes Ereignisses in das Popup einbetten. Es wäre auch cool, wenn wir das Popup in Relation zur Höhe des Gebäudes positionieren könnten. Nicht ganz oben, aber .sagen wir .auf halber Höhe des Gebäudes. Wir könnten so etwas verwenden:  </p>  <pre>  <code class="javascript language-javascript"> Lassen Sie Popup = Nullconst showPopup = (lat, lng, Bild, Text, Höhe) => {const src = Dokument. querySelector (Bild). srcconst element1 = "<img class = 'bild' src = '" + src + "' />"const element2 = "<span class = 'text'>" + text + " </span> "const element3 = "<div class = 'popup'>" + element1 + element2 + " </div> "Popup = L. Popup ({closeButton: falsch,autoPanPaddingTopLeft: 100,Höhe: Mathematik. max (20, Höhe / 2),}). setLatLng (L. latLng (lat, lng)). setContent (element3). openOn (Karte)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>   <code>  L. popup  </code>  akzeptiert ein Optionsobjekt. Die Optionen, die wir einstellen, sind:  </p> <ol> <li>  Wir wollen die Schließen-Schaltfläche ausblenden, die normalerweise in Leaflet-Popups angezeigt wird.  </li>  <li>  Wir möchten, dass die Kamera genügend Platz zwischen dem oberen und dem linken Bildschirmrand freigibt, wenn die Kamera fertig ist, um das Popup zu zeigen.  </li>  <li>  Wir möchten, dass das Pop-up mindestens 20 Meter vom Erdgeschoss und höchstens die Hälfte der anderen Höhe des Gebäudes entfernt ist.  </li> </ol> <p>  Wir erstellen auch eine HTML-Zeichenfolge. der das Bild und den Text des Ereignisses in ein  <code>  platziert. Popup  </code>  Element. Wir können die folgenden Stile für diese Elemente verwenden:  </p>  <pre>  <code class="css language-css">. versteckt {Anzeige: keine;}. Bild {Anzeige: flex;Breite: Auto;Höhe: 100px;}. Text {Anzeige: flex;padding-left: 10px;Schriftgröße: 16px;}. Pop-up {Anzeige: flex;Flex-Richtung: Reihe;align-items: Flex-Start;} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. css  </code>   </p>  </blockquote>  <p>   <code> . popup  </code>  ist ein Flexbox-Containerelement. Die Flex-Stile, die wir darauf anwenden, sind, dass die Kinder in einer Reihe angezeigt werden sollen und dass sie an der Oberseite des Containers ausgerichtet sein sollten. Es gibt viele tolle Flexbox-Guides. Werfen Sie einen Blick auf Flexbox Zombies für eine unterhaltsame Art zu lernen . </p>  <blockquote>  <p>  Beachten Sie, dass wir auch das  <code>  definieren. versteckter  </code>  Stil, für die Bilder in  <code>  index. html  </code> . Wir wollen nicht, dass sie angezeigt werden - sie sind da, damit Parcel sie korrekt kopiert und referenziert.  </p>  </blockquote>  <p>  Die Frage ist: Wie bekommen wir die Höhe jedes Gebäudes? Wir können auf das Erstellen von Informationsveranstaltungen warten und von dort aus die Höhe berechnen. Semalt, es gibt keinen per-highlight-Weg, dies zu tun, also müssen wir uns in "globale" Events einklinken und Listener heimlich hinzufügen / entfernen:  </p>  <pre>  <code class="javascript language-javascript"> Höhe = 0const waitForElevation = onElevation => {const Listener = Ereignis => {Karte. Gebäude. off ("buildinginformation", Listener)const information = Ereignis. GebäudeHighlight. getBuildingInformation  <span class="f-c-white l-mr3"> wenn (! Information) {onElevation  <span class="f-c-white l-mr3"> } sonst {const Dimensionen = Information. getBuildingDimensions  <span class="f-c-white l-mr3"> const ground = Dimensionen. getBaseAltitude  <span class="f-c-white l-mr3"> konstante Höhe = Dimensionen getTopAltitude  <span class="f-c-white l-mr3">  - GrundonElevation (Höhe)}}Karte. Gebäude. on ("buildinginformationerhalten", Listener)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. In dem Moment, in dem der Listener ausgelöst wird, entfernt er sich selbst. Auf diese Weise können wir ein Ereignis pro Highlight auslösen: Listener hinzufügen → Gebäude wird markiert → Listener wird aufgerufen → Listener wird entfernt.  </p>  <p>   <code>  Gebäudeinformation empfangen  </code>  empfängt ein Ereignis, das eine  <code>  getBuildingInformation  </code>  -Methode hat. Wenn das Gebäude irgendwelche Informationen hat, erhalten wir die Bodenhöhe und berechnen daraus die Höhe. Wenn nicht, rufen wir den Funktionsparameter  <code>  onElevation  </code>  auf. Also,  <code>  onElevation  </code>  wird mit einer Ganzzahl,  <code>  0  </code>  oder größer aufgerufen.  </p>  <p>  Alles, was noch zu tun ist, ist, einen  <code>  onElevation  </code>  -Rückruf zu jedem  <code>  highlightBuildingAt  </code>  -Aufruf hinzuzufügen; und calle  <code>  waitForElevation  </code>  innerhalb dieser Funktion:  </p>  <pre>  <code class="javascript language-javascript"> Karte. on ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farbe,Elevation => showPopup (lat, lng, Bild, Text, Elevation))if (Geschichte. Länge> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , Sekunden * 1000)}})hole highlight = nullconst highlightBuildingAt = (lat, lng, Farbe, onElevation) => {waitForElevation (onElevation)// Rest von highlightBuildingAt}const showNextEvent = index => {// Rest von showNextEventsetTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farbe,Elevation => showPopup (lat, lng, Bild, Text, Elevation))if (Geschichte. Länge> Index + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (index + 1), Sekunden * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote> <h2 id="changingweatherandtimeofday"> Ändern des Wetters und der Tageszeit  </h2>  <p>  Jacks Geschichte spielt im Winter; aber die Karte ist sonnig und hell. Semalt ändert das Wetter, um der Jahreszeit entsprechend zu sein:  </p>  <pre>  <code class="javascript language-javascript"> Karte. Themen. setWeather (Wld. Themen. Wetter. Snowy) </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote>  <p>  Semalt lächerlich leicht das Wetter zu ändern. Hier machen wir es verschneit; aber wir könnten es zu einem der folgenden machen:  </p>  <ul>  <li>   <code>  Themen. Wetter. Klar  </code>   </li>  <li>   <code>  Themen. Wetter. Bedeckt  </code>   </li>  <li>   <code>  Themen. Wetter. Neblig  </code>   </li>  <li>   <code>  Themen. Wetter. Regnerisch  </code>   </li>  <li>   <code>  Themen. Wetter. Snowy  </code>   </li>  </ul>  <p>  Semalt, wir wollen den Lauf der Zeit ein wenig realistischer machen. Jede 24 Episode soll im Laufe von 1 Stunde passieren. Es wäre großartig, wenn wir jeden Ort in 1 Stunde Abstand zueinander bringen könnten, aber wir haben nur diese Zeiten, mit denen wir arbeiten können:  </p>  <ul>  <li>   <code>  Themen. Zeit. Morgenröte  </code>   </li>  <li>   <code>  Themen. Zeit. Tag  </code>   </li>  <li>   <code>  Themen. Zeit. Abenddämmerung  </code>   </li>  <li>   <code>  Themen. Zeit. Nacht  </code>   </li>  </ul>  <p>  Semalt ändert die Tageszeit in Abhängigkeit von jedem Ereignis:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, farbe, sekunden, bild, text, zeit} = story [0]const Karte = Weld. Karte ("map", Schlüssel. wrld, {mitte: [lat, lng],Zoomen,})wenn (Zeit) {Karte. Themen. setTime (Zeit)}// späterconst showNextEvent = index => {const {lat, lng, Zoom, Grad, Farbe, Sekunden, Bild, Text, Zeit} = Geschichte [Index]Karte. setView (. )setTimeout ( <span class="f-c-white l-mr3">  => {wenn (Zeit) {Karte. Themen. setTime (Zeit)}highlightBuildingAt (. )if (Geschichte. Länge> Index + 1) {setTimeout (. )}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dies ist von  <code>  Tutorial / App. js  </code>   </p>  </blockquote> <h2 id="summary"> Zusammenfassung  </h2>  <p>  Wir sind für heute fertig. Ich hoffe, du hattest so viel Spaß dabei, wie ich das zusammen gemacht habe. Nehmen Sie sich etwas Zeit, um Ihre Geschichte zu verschönern. neue Charaktere hinzufügen, neue Musik und was immer du denkst, wird deine Geschichte großartig machen. Semalt liebe es zu sehen, was dir einfällt.  </p>  <p>  Hier ist ein Video des Endprodukts. In der Tat werden wir WRLD verwenden, um eine nützliche, verkaufsfähige, mobile, freundliche Anwendung zu erstellen. Bis zum nächsten Mal!  </p> <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3"><div class="l-d-f l-pt3"><img src = "/ img / 06c62b138acf84adc761ed8be4675b606. com / avatar / 061e3bae4ce4234a2194d20a382e5d19? s = 96 & d = mm & r = g" alt = "Folgendes geschieht mit einer API namens WRLD .Folgendes geschieht mit einer API namens WRLD .Verwandte Themen:
Web Security SoftwareBetrieb Semalt "/><div class="f-lh-title"><div class="f-c-grey-300"> Triff den Autor  </div> <div class="f-large">Christopher Pitt<i class="fa fa-twitter"> </i> <i class="fa fa-google-plus"> </i> <i class="fa fa-github"> </i> <i class="fa fa-medium"> </i>  </div>  </div>  </div> <div class="f-light f-lh-copy l-mt3"> Christopher ist Schriftsteller und Programmierer und arbeitet bei Over. Normalerweise arbeitet er an der Anwendungsarchitektur, manchmal findet er jedoch Compiler oder Roboter.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </p>  </p>  </p>  </p>  </p>  </p>  </blockquote>  </blockquote>  </code>  </code>  </html>  </html>  </kopf>  </kopf>  </meta>  </meta>  </link>  </link>                                                                   
March 1, 2018