Kreatives Programmieren mit JavaScript: Von den Grundlagen zu Meisterwerken | Belhadj Ramzi | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Kreatives Programmieren mit JavaScript: Von den Grundlagen zu Meisterwerken

teacher avatar Belhadj Ramzi, concept artist, concept designer, vfx ar

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Kurs-Einführung

      2:57

    • 2.

      Wer beeinflusst mich

      3:45

    • 3.

      Die Verwirrung beginnen

      1:39

    • 4.

      Einführung in Java

      12:22

    • 5.

      Variablen und Funktionen lernen

      20:00

    • 6.

      Arrays und Loops lernen

      13:30

    • 7.

      Umweltskizzen lernen

      12:02

    • 8.

      Lerne etwas über Transformation

      6:40

    • 9.

      Mehr über Winkel erfahren

      5:41

    • 10.

      Mehr über Utility-Funktionen erfahren

      4:54

    • 11.

      Erlerne das Erstellen von Bögen

      5:47

    • 12.

      Mehr über Objekte und Klassen erfahren

      9:35

    • 13.

      Eine Animation erstellen

      6:13

    • 14.

      Agenten mit Linien verbinden

      6:36

    • 15.

      Mehr über Videoausgabe erfahren

      2:00

    • 16.

      So erstellst du Raster

      7:40

    • 17.

      Manipulieren von Formen mit Rauschen

      6:27

    • 18.

      Erstelle GUI-Folien

      10:55

    • 19.

      Text erstellen lernen

      9:09

    • 20.

      Mehr über Async erfahren

      9:49

    • 21.

      Eine Bitmap erstellen

      10:26

    • 22.

      Mehr über Glyphen erfahren

      6:04

    • 23.

      Rechteck zeichnen

      6:08

    • 24.

      Zeichnen eines schrägen Rechtecks

      6:08

    • 25.

      So erstellst du Distribution

      5:04

    • 26.

      Lerne das Hinzufügen von Farben

      9:12

    • 27.

      Schnittmaske erstellen

      6:37

    • 28.

      Erstelle einen zufälligen Samen

      2:42

    • 29.

      Erstelle Qudratische Kurven

      5:44

    • 30.

      Erstelle eine Cursor-Interaktion

      8:54

    • 31.

      Mehrere Punkte erstellen

      5:56

    • 32.

      Erfahre mehr über die Erstellung von Rastern

      8:30

    • 33.

      Lerne, Segmente zu erstellen

      6:22

    • 34.

      Rasteranimation erstellen

      3:23

    • 35.

      Erstelle Drückenspiel

      4:50

    • 36.

      Einen Analyzer erstellen

      7:48

    • 37.

      So erzeugst du Frequenzen

      7:00

    • 38.

      Lerne, Bogen-Audio zu erstellen

      9:38

    • 39.

      Erfahre mehr über die Postererstellung

      4:07

    • 40.

      Ein einzelnes Partikel zeichnen

      4:23

    • 41.

      Über das Aufbringen von Kräften lernen

      6:08

    • 42.

      So verteilt man die Partikel

      7:42

    • 43.

      Skalierung und Farben ändern

      3:43

    • 44.

      Erstellen von Bilddaten

      8:40

    • 45.

      Kursprojekt

      0:44

    • 46.

      Letzte Tipps

      2:34

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

5

Teilnehmer:innen

--

Projekte

Über diesen Kurs

Code in Kunst verwandeln! Lerne, generative Kunst, Animationen und interaktive visuelle Elemente mit JavaScript zu erstellen

Möchtest du deine Kreativität durch Code entfalten? Hast du dich schon einmal gefragt, wie digitale Künstler:innen, Designer:innen und Entwickler:innen mit JavaScript wunderschöne visuelle Elemente, faszinierende Animationen und interaktive Erlebnisse schaffen?

Willkommen bei Kreatives Programmieren mit JavaScript, einem praktischen Kurs, in dem du die künstlerische Seite der Programmierung erkundest und lernst, atemberaubende generative Kunst, interaktive Animationen und visuelle Effekte von Grund auf neu zu erstellen. Die Grundlagen der Programmierung erkunden und lernen, wie man mit kreativer Programmierung in JavaScript zeichnet

Animationen, Drucke, interaktive Stücke und mehr produzieren, für die ich mit Marken zusammengearbeitet habe.

Entfessle grenzenlose Kreativität – Experimentiere mit Farbtheorie, Mustern, Zufälligkeit und algorithmischem Design.

Experimentiere mit Farbtheorie, Mustern, Zufälligkeit und algorithmischem Design. Entwickle visuelle Elemente, die auf Benutzereingaben, Bewegungen und Echtzeitinteraktionen reagieren.

Egal, ob du Künstler:in, Designer:in, Webentwickler:in oder Programmierenthusiast bist, dieser Kurs wird dir helfen, Ideen mit JavaScript in visuelle dynamische Erlebnisse umzuwandeln.

Am Ende dieses Kurses kannst du generative Kunst, interaktive Erlebnisse und dynamische Animationen mit JavaScript erstellen. Ganz gleich, ob du webbasierte Kunst, Spiele-Assets, datenbasierte visuelle Elemente oder einfach nur zum Spaß programmierst, dieser Kurs wird deinen inneren kreativen Programmierer entfesseln.

Triff deine:n Kursleiter:in

Teacher Profile Image

Belhadj Ramzi

concept artist, concept designer, vfx ar

Kursleiter:in

Hello, I'm ramzi belhadj a futurist and professional designer 

i work as vfx artist, production designer, concept artist, illustrator, animator, visual designer, graphic designer, director  and  many other things. 

my passion is the cinema and the gaming production, i adore the magic of creating worlds and stories, 

and putting smiles upon people faces , i love teaching and learning, it makes always your life different

more cultivated and skilled.

i like to share all my knowledge and experience with hungry students to learn and evolve

i would enjoy taking you with me on this journey to create amazing art .

"intellectual growth should commence at birth and erase at death" albert einstein   .

Vollständiges Profil ansehen

Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Kurs-Einführung: Hallo. Mein Name ist Renzi Blah Ich bin Konzeptkünstler, Grafikdesigner, bildender Künstler und viele andere Dinge Ich habe zwei Jahre Erfahrung im Bereich Grafikdesign und Kunst. Ich war mit vielen Marken und mit vielen Kunden unterwegs. Als Mensch habe ich eine inhärente Wertschätzung für Formen, Muster und Rhythmen. Ich erstelle Bilder mit Code, weil ich an der Struktur interessiert bin, die hinter den Dingen steckt, die wir wollen, ästhetisch ansprechend, experimentiere mit kreativem Code und lasse mich nie ausleihen. Es gibt immer etwas zu entdecken, neue Techniken zu erlernen oder ein neues Bild Ich verbinde mein Interesse an animierten Grafiken und visuellen Inhalten mit Programmierern, sodass ich jeden guten Code entwickeln, zeichnen und animieren kann guten Code entwickeln, zeichnen und animieren kann Ich habe viele Programmiersprachen verwendet mein derzeitiger Favorit ist JavaScript Es ist leicht zu erlernen, flexibel eignet sich für schnelle kleine Projekte und für große Projekte. In diesen Award-Cools werden wir die Grundlagen des Programmierens lernen, werden wir die Grundlagen des Programmierens lernen indem wir visuelle Elemente mit JavaScript erstellen Für das Abschlussprojekt erstellen Sie eine Reihe von visuellen Kompositionen mit einem Code, der in einem Webbrowser implementiert werden kann Zu Beginn zeige ich Ihnen, wie Sie einen Texteditor einrichten und Code in einem Browser ausführen. Anschließend werde ich Ihnen einige grundlegende Konzepte von JavaScript beibringen , wie z. B. variable Funktionsarrays und Schleifen Dabei verwende ich immer Beispiele und zeichne Bilder Wir beginnen mit einem einfachen Setup und gehen dann zur Umgebung zum Skizzieren mit dem Code Canvas Sketch über Danach beenden wir die visuelle Darstellung mithilfe von Rotation und Bogen und fahren dann mit einer animierten Skizze mit beweglichen Agenten und Ich werde Ihnen auch zeigen, wie Sie Ihr Kunstwerk als Bild und Video exportieren Im nächsten Schritt werden wir uns damit befassen, Raster zu beenden, Rauschen zu verwenden und unser eigenes Bedienfeld mit einem Schieberegler zu erstellen , mit dem Werte in Echtzeit angepasst werden Dann zeige ich Ihnen, wie Sie auf kreative Weise mit Text arbeiten kreative Weise mit Text und Farbwerte aus Pixeln eines Bildes lesen Im zweiten Teil unseres Kurses , der am weitesten fortgeschritten ist, werden wir mit der ersten Komposition arbeiten. Wir beginnen mit einem einfachen Rechteck und bauen dann auf ein geometrisches Muster auf. Wir werden etwas über Farbpaletten, Mischmodi und Schnittmasken Dann gehen wir zu den Kurven über. Wir beginnen mit einer einzelnen quadratischen Kurve, gefolgt von einer nahtlosen Kurve mit mehreren Punkten Dabei werden wir uns auch mit der Cursorinteraktion und der Farbzuordnung befassen und dann die Skizze erstellen und eine Audiovisualisierung erstellen Ich werde Ihnen beibringen, wie Sie Sounddateien mit ihren Daten abspielen und die Frequenz verwenden , um Animationen zu steuern. Und für die letzte Komposition, in der wir mit den Partikeln spielen, legen wir ihre Geschwindigkeit und Beschleunigung fest, damit sie auf den Cursor reagieren Wir werden auch lernen, ihre Farbe anhand von Bildern einzustellen ihre Farbe anhand von Bildern Abschließend werden wir mit ein paar zusätzlichen Tipps und Tricks abschließen . Am Ende dieses Kurses verfügen Sie über eine Menge Technik, um weiterzumachen und Ihre eigene Komposition zu entwickeln. Um das Beste aus diesen Listons herauszuholen, ist es am besten, wenn Sie mit JavaScript oder einer ähnlichen Programmiersprache vertraut sind JavaScript oder einer ähnlichen Programmiersprache Schreiben Sie Code und erstellen Sie Ihre eigene Struktur, um etwas Schönes zu schaffen Willkommen im Kurs und ich wünsche dir viel Spaß. 2. Wer beeinflusst mich: In diesem Hörbuch werde ich Ihnen von einigen der Menschen erzählen , die mich inspiriert haben. Als ich mit kreativem Programmieren anfing, war es nicht nur eine Person, die mich dazu brachte, es zu tun. Es gab eine Community von Leuten großartige Arbeit mit dem Fleisch geleistet haben, das später zu Adobe Flesh wurde. Aber ein Name, der aus dieser Zeit hervorsticht , ist Yugo Nakamur Er ist ein japanischer Designer, der früher diese Website namens yugop.com hatte, die leider nicht Dieses Codierungsexperiment war sehr minimal und sehr interessant Nicht viele von ihnen, nur eine Handvoll, aber sie hatten zu dieser Zeit großen Einfluss auf viele Menschen. Er leitet das Designstudio in Japan und leistet immer noch tolle Arbeit. Er überspringt ein paar Jahre, als das Web anfing, von Flash auf HTML Five umzusteigen Es gab zwei Websites , die mich dazu inspirierten , mit Canvas kreativ zu programmieren Eine davon war Sketch Dot Gs von Justin Wende, ein minimaler Rahmen für das Skizzieren und Verarbeiten Es gab eine Galerie mit einigen kleinen Experimenten, mit denen es ziemlich viel Spaß gemacht hat, damit zu spielen Das andere war Play Pit von Aji Moriahi, der mit einer CD experimentierte, aber auch Die Website war nur eine Sammlung zufälliger Ideen. Sie hatten nicht einmal Namen, nur Zahlen. Mir gefällt die Idee, einen Raum für zufällige Experimente zu schaffen . Es ist nicht nötig, auf ein Projekt zu warten , um mit der Programmierung einer Idee zu beginnen. Es könnte einfach als schnelles Experiment veröffentlicht werden. Außerhalb des Internets war ich auch sehr beeindruckt von der Arbeit einiger digitaler Künstler. Einer von ihnen war Memo at Ten , der nicht nur eine sehr interessante Idee hat, sondern auch ein sehr hohes Maß an Umsetzung beibehält Seine Arbeit ist sehr vielseitig, sehr gut präsentiert und zeigt manchmal ein bisschen den Prozess, der hinter der Entstehung des Kunstwerks Ich bin ein großer Fan eines Projekts aus dem Jahr 2012 namens Forms. Es gibt ein Video , in dem wir Aufnahmen von Atlet in Bewegung sehen können und wie diese als Input für die abstrakte Kunst verwendet wurden, die sie geschaffen Eine andere digitale Kunst, die ich wirklich mag, ist Rogi Atida. Er hat einen unverkennbaren Stil und ist sehr konsistent mit seiner Ästhetik Seine Arbeit ist gleichzeitig minimal und komplex. Er zeigt uns , dass wir mit Code etwas Schönes erschaffen können , ohne uns auf schwere Motoren oder realistische Lichttechniken verlassen zu müssen . Und in jüngerer Zeit, in der Ära von Instagram, gibt es viele gute Leute, die großartige Arbeit leisten. Einer, den ich hervorheben muss, ist Matt Drier , der einen unendlichen Ideenpool für das Skizzieren mit Code zu haben scheint Ideenpool für das Skizzieren mit Er veröffentlicht ständig neues Material, und er passt sich dem Aussehen seiner Arbeit an Wie wir später in diesem Kurs sehen werden, ist er auch der Autor eines beliebten Tools für kreativen Code mit Canvas. Und schließlich ist Anders Hoff, auch bekannt als n Convergent, ein Künstler, der eigentlich nicht auf Instagram , aber auf Twitter sehr aktiv ist , Auch hier minimalistisch und schön, aber nicht unbedingt einfach Er kreiert Systeme und erforscht Verhalten mithilfe von Mathematik und Geometrie, um seine Kunst zu schaffen. Ich hoffe, Sie fanden die Arbeit dieses Künstlers inspirierend, denn jetzt sind wir dran. Es ist Zeit für uns , mit dem Programmieren zu beginnen. 3. Die Verwirrung beginnen: Alles, was wir brauchen, um loszulegen, ist ein Webbrowser und ein Wir werden den Texteditor verwenden, um einen Code zu schreiben, und den Browser, um ihn auszuführen. Sie sehen sich das wahrscheinlich bereits in einem Webbrowser an. Die Hälfte der Arbeit ist also schon erledigt. Sie können gerne jeden Browser verwenden, mit dem Sie vertraut sind. Ich werde Google Chrome verwenden, aber es wäre in Ordnung, Firefox, Edge oder Safari zu verwenden . Der Inhalt, den wir sehen werden , sollte allen gängigen Browsern einwandfrei funktionieren. Was den Texteditor betrifft, so gibt es viele gute Optionen. Ich werde zwei der beliebtesten erwähnen, Visual Studio-Code und Sublime Text Sie sind beide für Windows und Mac verfügbar und beide sind sehr gut Ich werde Sublime Text verwenden , weil es lichtschnell ist und ich es wirklich mag Aber hier ist es dasselbe wie mit einem Browser. Wenn Sie bereits einen Lieblingseditor haben, kein Problem. Fühlen Sie sich frei, alles zu verwenden , was Sie für den Kurs bevorzugen. Falls du noch keinen Favoriten hast, oder wenn du einfach genau dem folgen willst , was du auf meinem Bildschirm siehst, dann würde ich Sublime Text empfehlen. Jetzt Geheimnisse hier. Klicken Sie einfach auf den großen Download-Button, folgen Sie den Schritten auf dem Bildschirm und der Editor sollte in wenigen Sekunden betriebsbereit sein. Jetzt, wo der Browser bereit und Editor bereit sind, können wir loslegen. In der nächsten Hörprobe werden wir eine Einführung in JavaScript geben. 4. Einführung in Java: Um das Beste aus diesem Kurs herauszuholen, gehe ich davon aus, dass Sie bereits mit JavaScript vertraut sind. Unser Fokus wird darauf liegen, Visuals mit Code zu beenden. Wenn wir anfangen müssten, die Sprache von Grund auf zu behandeln , bräuchten wir den gesamten Kurs nur dafür Wenn dies also Ihr erster Kontakt mit einem Programmierer ist, würde ich empfehlen, sich zuerst mit den Grundlagen vertraut Wenn Sie schnell lernen oder andere Programmiersprachen kennen oder wenn Sie einfach nur Ihr Gedächtnis über JavaScript auffrischen möchten, ist dies genau das Richtige für Sie Ihr Gedächtnis über JavaScript auffrischen möchten, ist dies Wenn Sie bereits mit JavaScript vertraut sind, können Sie gerne zum anderen Video springen Also hier habe ich vorerst Google Chrome und Sublime Text. Ich möchte nicht, dass du dir Gedanken über die Einrichtung machst oder von dem, was ich gerade eintippen werde, kopierst Wir werden noch nichts aufgeben. Wir schauen uns nur die Sprache an. Wir werden mit einer Variablen beginnen. In Javascript werden Variablen mit einem Let und Konstanten mit Kosten deklariert . Variablen können nach der Deklaration geändert werden, aber konstant ist es durchaus üblich, das Wort Variable zu hören , wenn es sich auf eine dieser Variablen bezieht. Auch wenn Constant sich nicht darauf verlassen kann, variieren. Jetzt funktioniert. Es ist auch üblich, sie mit Konstanten zu deklarieren Beispiel: Konstanten multiplizieren sich mit A und B innerhalb der übergeordneten Größen Dann ein flacher Pfeil und dann Carl BrgusrTurn A mal B. Dies entspricht dem Schreiben der Funktion A und B, gib A mal B zurück. Wenn Sie andere Programmiersprachen kennen, kommt Ihnen das zweite Format vielleicht vertrauter Aber wie dem auch sei, beide sind dasselbe. Beide sind gültig. Wir werden während des gesamten Kurses das erste Formular verwenden und dann die Funktion aufrufen Wir multiplizieren die Klammern und dann die Parameter, die wir übergeben wollen Zum Beispiel acht und vier, das würde 32 ausgeben Wenn wir die Ausgabe sehen möchten, der Konsole protokollieren, da Sie mit dem Browser arbeiten können wir sie in der Konsole protokollieren, da Sie mit dem Browser arbeiten. Also hier speichere ich das Ergebnis in einer Variablen und logge es mit dem Console Dot Log aus. Um die Konsole zu öffnen, drücken Sie unter Windows die Strg- und Shift-Taste oder auf dem Mac die Befehlstaste I. Und da ist es. Weiter zu Array und Objekten. Arrays werden mit eckigen Klammern und Objekte mit geschweiften Klammern deklariert eckigen Klammern und Objekte mit geschweiften Klammern Ein Beispiel für ein Array könnten Farben sein , bei denen jeder Wert eine Zeichenfolge ist Zum Beispiel Blau, Gelb, Rot und Grün. Ein Beispiel für ein Objekt könnte ein Polygon mit Eigenschaften wie Sichtweite und Radius Um auf ein Element im Array zuzugreifen, verwenden wir wiederum eckige Klammern. Beispiel Farben eckige Klammer Null gibt uns das erste Element der Reihe , in diesem Fall blau Um auf eine Eigenschaft eines Objekts zuzugreifen, verwenden wir den gleichen Namen des Objekts, Punkt, und dann den Namen der Eigenschaft. Zum Beispiel Polygon Dot Radio, das 120 ausgibt. Wir können Arrays mithilfe einer klassischen Vierschleife, die aus drei Teilen besteht , in einer Schleife durchlaufen drei Teilen besteht , in einer Zunächst der Index der Iteration. Traditionell entspricht der Buchstabe I dann der Länge der Schleife wie in Hallo plupon, obwohl ich kleiner als die Farbpunktlänge ist, und zum Schluss, was mit dem I bei jeder Iteration zu tun Auch hier, traditionell, mit I plus plus um eins erhöht Hier können wir auf der Konsole nach dem Wert von I und dem Wert des Arrays bei I suchen I und dem Wert des Arrays bei . Eine andere Art der Iteration durch ein Array ist die Breite für jedes Array Farbpunkte für jeden. Diesmal ist es eine Funktion und der erste Parameter ist der Wert des Elements. Von jeder Iteration können wir hier auch ein Punktprotokollelement für die Konsole Und wenn wir den Index der Iteration benötigen, wird er als zweiter Parameter übergeben Wenn nicht, ist die Syntax für Bedingungen ziemlich einfach Wenn etwas wahr ist, console dot log dot cp sole dot log dot no Wenn wir eine Variable deklarieren, können wir einen anderen, kompakteren Typ von Bedingungen mit einem ternären Operator verwenden von Bedingungen mit einem ternären Operator Nehmen wir an, wir haben eine Variable namens Nacht und möchten die Hintergrundfarbe danach einstellen ob es Nacht ist Die Hintergrundfarbe entspricht heute Abend. Fragezeichen, schwarz, Doppelpunkt weiß. Das entspricht dem Schreiben, wenn Nacht gleich wahr ist. Hintergrundfarbe entspricht Schwarz. Andernfalls entspricht die Hintergrundfarbe Weiß. Ein letztes Thema, das ich in unserer Zusammenfassung behandeln möchte, ist die Verwendung einer synchronen Funktion mit einem Sync und einer Gewichtung In JavaScript wird der Code standardmäßig synchron unterbrochen Wenn Sie also eine Variable mit einem Wert in Zeile 93 deklarieren, wissen Sie, dass sie in Zeile 92 noch nicht existiert und dass sie einen Wert in Zeile 94 hat Manchmal müssen wir Code ausführen , der nicht sofort aufgelöst Etwas in einer Zeile aufzurufen bedeutet nicht, dass wir das Ergebnis erhalten , bevor die nächste Zeile unterbrochen wird. Ein Beispiel dafür ist, wenn wir ein Bild laden wollen. Lassen Sie uns eine Funktion namens Bild laden erstellen. Sie verwendet URL als Parameter. Dann erstellen wir ein neues Bild, das in einer Variablen namens EMG gespeichert ist. Wir haben die EMG-Quelle an das RL weitergeleitet. Und dann geben wir endlich das Bild zurück. Jetzt können wir unsere Funktion zum Beispiel mit einer Variablen namens my Image verwenden , die dem Laden von Bild entspricht, und dann mit der URL, die wir übergeben möchten. Ich werde ein generisches Bild von Lorem PixM verwenden und diese URL hierher nehmen, die mir ein zufälliges Bild mit einer Breite von 200 Pixeln geben sollte , und dann versuchen wir, das Bild abzumelden wir keinen Fehler bekommen, aber die Breite wird Null sein, weil das Bild nicht fertig geladen wird, bevor wir versuchen, es daraus zu lesen. Das Laden eines Bilds ist eine unsynchronisierte Aufgabe. Um eine solche Situation zu bewältigen, können wir ein Javascript-Konzept namens Promise verwenden Ich werde eine Kopie von dem machen, was wir hier geschrieben haben. Dann werden wir diesen Blockout loben. Dann modifizieren wir die Kopie, um eine Sünde zu verwenden und warten ab. Zuerst muss ich etwas vor der Funktion eingeben , dann darin. Ich möchte ein neues Versprechen mit den beiden Parametern „ Resolve“ und „Reject“ zurückgeben . Beim Laden des Bildes wollen wir das Versprechen auflösen und MG zurückgeben. Und im Irrtum wollen wir das Versprechen zurückweisen. I Als Nächstes werde ich diesen Teil in eine andere Synchronisierungsfunktion namens Start verschieben in eine andere Synchronisierungsfunktion namens Start Und dann setze ich mein Bild auf Gewicht laden. Und dann rufe einfach Start an , um das Ergebnis zu sehen. Und hier ist der richtige Weg. Also hier sagen wir dem Browser, er soll warten, bis die Probleme behoben sind , und erst dann die nächste Zeile ausführen. Dieser letzte Teil war möglicherweise etwas komplizierter als der Rest, den wir in unserer Zusammenfassung behandelt haben Wenn Sie bis zu diesem Teil alles verstanden haben, sind Sie bereit, mit dem Kurs fortzufahren Es ist nicht zwingend erforderlich, szenisch zu verstehen und jetzt zu warten, aber es ist gut zu wissen, dass es ihn gibt, falls wir später darauf stoßen Richtig. Das ist unsere ganze Zusammenfassung Es war einfach kurz und bündig. Natürlich hat Javascript mehr zu bieten als das. Wenn also etwas nicht klar war, schauen Sie unbedingt in der Dokumentation nach. Als Nächstes werden wir mit der Einrichtung unserer Umgebung beginnen. 5. Variablen und Funktionen lernen: Beim Codieren geht es darum, einer Maschine Anweisungen zu geben. Wir müssen beide eine gemeinsame Sprache sprechen, und die Maschine. In unserem Fall werden wir Javascript sprechen und die Maschine wird den Browser als Interpreter verwenden den Browser als Interpreter Browser sind sehr mächtige Tools. Ihre Hauptfunktion besteht darin, STML-Seiten zu rendern, was keine leichte Aufgabe ist Mit SDML kann wirklich viel getan werden. JavaScript und CSS, falls Sie mit diesen Begriffen nicht vertraut sind, kann ich es einfach ausdrücken: SDML verarbeitet die Daten, CSS kümmert sich um die Formatierung und JavaScript kümmert sich um das Verhalten Unser Ziel in diesem Kurs ist es, JavaScript zu schreiben, aber ich möchte Ihnen auch zeigen, wie Sie etwas von vorne beginnen können, aus einer leeren Datei Also müssen wir zuerst ein bisschen DML sehen. Wenn wir unseren Editor öffnen, sehen wir eine leere Datei Und das erste, was ich tun möchte, ist es zu speichern. Ich habe bereits einen Ordner erstellt , in dem alle Dateien dieses Kurses gespeichert werden. Und ich werde das als Hello Dot HTML speichern. Ein HTML-Dokument besteht aus Blöcken, die andere Blöcke enthalten können. Und diese Blöcke sind definitiv nach Tags sortiert. Lass uns unseren ersten Tag schreiben. Zwischen spitzen Klammern geben wir HTML ein. Dies ist das öffnende Tag, und wir benötigen auch das schließende Tag, das mit einer spitzen Klammer und einem Schrägstrich beginnt Sie haben vielleicht bemerkt , dass der Editor das Tag bereits automatisch vervollständigt hat, sobald ich den Schrägstrich eingegeben habe ich den Diese Tags besagen, dass wir hier ein CML-Dokument haben. Und als absolutes Minimum benötigen wir mindestens ein weiteres Tag, das den Hauptteil der Seite definieren soll Lassen Sie uns also auch den Hauptteil schreiben und ihn erneut öffnen und schließen. Und dann können wir in den Körper eine Nachricht schreiben. Hallo Wort. Jetzt speichern wir die Datei. Doppelklicken Sie im Explorer oder Finder darauf. Und öffne es im Browser, und da ist unsere ganz einfache erste SEML-Seite Was ist nun, wenn wir möchten, dass die Nachricht als Header angezeigt wird Wir müssten es nur mit H-One-Tags umwickeln , öffnen und schließen. Und ich werde zum Browser zurückkehren, die Seite aktualisieren und unsere Nachricht ist jetzt als Header formatiert Der Browser drückt die SGML-Datei und rendert ihre Elemente Wir können die SGML hinter dieser Seite oder tatsächlich sehen. Jede Seite, die Sie im Browser mit dem Elementinspektor sehen , ist in den meisten Browsern die Tastenkombination Shift I oder Command Shift I. Oder wir können auch mit der rechten Maustaste auf eine beliebige Stelle auf der Seite klicken und zur Inspektion gehen Und da ist wieder unser H-one-Element, aber wir sind nicht wirklich an Header-Elementen interessiert. Wir werden SGML nur verwenden, um uns einen Raum zu geben, auf den wir zurückgreifen können, und dafür gibt es ein Element Es heißt Canvas. Öffne es, schließ es. Und dieses Mal gehen wir in das Eröffnungs-Tag, um einige Eigenschaften hinzuzufügen. Mit 600 im Inneren, doppelten Codes und einer Höhe, die ebenfalls 600 entspricht Und wenn wir jetzt speichern und aktualisieren, sehen wir nichts. Und das liegt daran, dass die Leinwand immer noch transparent ist, da ist nichts drin. Aber wenn wir das Element und Spector verwenden, können wir sehen, dass es immer noch da Es ist eine Box mit 600 mal 600 Pixeln, in die wir mithilfe von Code zeichnen können Und um Code zu schreiben, benötigen wir ein weiteres Tag, das Script genannt wird. Hier schreiben wir JavaScript, das vom Browser unterbrochen wird, und das wird unser Bereich sein. Hier fangen wir an, etwas über Programmieren zu lernen, und das allererste Thema, über das ich sprechen möchte, ist variabel. Eine Variable ist ein Verweis auf einen Wert. Ich gebe Ihnen gleich ein Beispiel, sei X gleich fünf Hier ist X eine Variable und fünf ist es ein Wert. In JavaScript haben wir eine Variable mit dem Wort let deklariert. Nehmen wir an, ich muss diesen Wert an mehreren Stellen in meinem Code verwenden . Ich muss nicht überall fünf eingeben. Ich habe mich nur auf X bezogen. Und wenn sich der Wert später zum Beispiel auf vier ändert , verwendet der Rest des Codes den aktualisierten Wert. Schauen wir uns ein anderes Beispiel an. Lass es hier gleich 2024 sein. Was wäre, wenn wir auch ein nächstes Jahr einlagern wollten, ich könnte sagen, nächstes Jahr sei gleich 2025. Aber hier statt dem Typ 2025 einfach sagen, dass nächstes Jahr gleich Jahr plus eins ist. Wenn wir den Wert des Jahres ändern müssten, hätte das nächste Jahr bereits den richtigen Wert. Sie haben vielleicht bemerkt, dass ich das Semikolon hinter dem Wert verwende, das Ende der Zeile anzuzeigen Sie sind nicht verpflichtend. Browser geben keine Fehlermeldung aus, wenn Sie sie nicht verwenden. Es gibt jedoch einige Szenarien, Es gibt jedoch einige Szenarien denen es ohne Semikolons schwierig wird Deshalb ziehe ich es vor, explizit zu sagen, wo meine Zeilen enden. Das ist der Stil, dem ich in diesem Kurs folgen werde. Sie sind immer noch variabel und dienen nicht nur dazu, Zahlen zu speichern. Sie können auch andere Arten von Daten wie Text speichern, wir könnten sagen, das Abendessen sei gleichbedeutend mit Pasta. Hier habe ich Pasta in einem einzigen Code geschrieben So unterscheiden wir normalen Text von Variablen und anderen speziellen Wörtern in JavaScript. Wir könnten auch Doppelcodes verwenden, die auch funktionieren. In der Programmierung wird Text normalerweise als Zeichenfolge bezeichnet, da es sich um eine Zeichenfolge handelt. Schreiben wir eine weitere Zeichenfolge. Lass das Urteil heute Abend sein, das Abendessen findet statt. Und dann unsere Variable. Der Satz würde heute Abend lauten, das Abendessen wird Pasta sein. Aber wenn wir den Wert unserer Variablen ändern, würde der Satz heute Abend lauten, Abendessen wird Salat sein. Variablen gibt es überall und sie sind für die Programmierung unverzichtbar. Ich glaube nicht, dass ich Ihnen noch viele Beispiele nennen muss. Das Konzept ist ziemlich einfach zu verstehen. Wir werden sie ständig verwenden, aber Variablen allein machen nicht viel Bevor wir etwas tun können, müssen wir auch über Funktionen sprechen. Eine Funktion ist ein Codeblock, der eine Aufgabe ausführt. Das kann man sich als Aktionen vorstellen. Wenn wir eine Funktion aufrufen, führen wir einen Teil des Codes aus. Schauen wir uns ein Beispiel an. Funktion macht etwas, um Klammern zu öffnen und zu schließen. Geschweifte Klammern öffnen und schließen. Wir können nicht nur daran erkennen, dass es sich um eine Funktion handelt , weil ihr das Wort Funktion vorangestellt ist, sondern hauptsächlich den öffnenden und schließenden Klammern Das bedeutet hier Aktion. In diesem Fall deklarieren wir eine Funktion und zwischen der geschweiften Klammer schreiben wir, was die Funktion tun soll Und diese spezielle Funktion macht noch nichts. Rufen wir also eine an, die tatsächlich etwas tut. Wir werden ein Browser-Tool namens ConsOT verwenden , das der beste Freund des Programmierers ist , das der beste Freund des Programmierers ist und das wir hier neben dem Elementinspektor finden können Wir können die Logout-Nachricht aus unserem Code verwenden, und um das zu tun , müssen wir aconsole dot lug in Klammern aufrufen aconsole dot lug in Klammern Wir geben die Nachricht ein, die wir protokollieren möchten, zum Beispiel hallo. Und da ist unsere Nachricht. Lassen Sie uns jetzt etwas ändern, um etwas zu sagen, und dann können wir das Konsolenprotokoll in unsere Funktion einfügen. Ja, es ist in Ordnung, eine Funktion in eine andere Funktion einzufügen. Wir wollen nicht, dass es jedes Mal Hallo sagt. Wir wollen, dass es alles protokolliert, was wir an die Funktion übergeben. Und dafür benötigen wir einen Parameter. Nennen wir es Param. Es steht hier und hier zwischen den Klammern. Jetzt können wir say something aufrufen und unsere Nachricht als Parameter übergeben. Hallo da. Oder wir könnten den Satz, den wir zuvor erstellt haben, als Variable verwenden . Anstatt ständig Fenster auszutauschen, können wir vielleicht die Browser auf der einen Bildschirmhälfte und den Editor auf der anderen Bildschirmhälfte platzieren einen Bildschirmhälfte und den Editor auf der anderen Bildschirmhälfte Schauen wir uns ein anderes Beispiel mit Parametern an. Lassen Sie uns eine Funktion namens ED erstellen, die zwei Parameter A und B verwendet. Dann addieren wir sie A plus B. Und dann können wir die Funktion aufrufen und das Ergebnis in einer Variablen speichern. Lass Ergebnis B fünf und sieben addieren. Und dann protokollieren Sie es auf der Konsole , damit wir das Ergebnis sehen können. Nun, da ist nichts, und das liegt daran, dass die Funktion nur die Zahlen addiert, sie aber nicht zurückgibt und das liegt daran, dass die Funktion nur die Zahlen addiert, . Wenn wir wollen, dass eine Funktion eine Aufgabe ausführt und auch einen Wert zurückgibt, müssen wir das Wort return hinzufügen. Jetzt sehen wir das Ergebnis. Es gibt auch eine andere Art Funktionen in JavaScript zu schreiben, die wir tatsächlich häufiger sehen werden als bei der Words-Funktion, und zwar mit einer Pfeilfunktion. Lassen Sie uns eine erstellen, die Multiply heißt. Wir beginnen mit der Deklaration einer Variablen, also lassen wir multiplizieren und dann den Wert zwei setzen, Klammern öffnen und schließen, und dann brauchen wir einen fetten Pfeil, gleich und größer als die geschweiften Klammern ist Denken Sie daran, ich habe gesagt , dass Variablen auf Werte verweisen. Hier ist das Gleiche. Wir verwenden eine Variable, verweisen auf eine Funktion. Dies ist nur eine andere Art dasselbe zu schreiben, was wir hier oben gemacht haben. Wir können unsere Parameter A und B in die Klammern setzen, und diese Funktion gibt A mal B zurück. Um zu überprüfen, ob sie funktioniert, müssen wir das Ergebnis nicht einmal in einer Variablen speichern Wir können den Anruf einfach direkt protokollieren. Konsolenprotokoll, multiplizieren Sie fünf und sieben. Und das ist unser Ergebnis. Jetzt, wo wir über Variablen und Funktionen Bescheid wissen, können wir anfangen, im Code zu ertrinken Wir benötigen eine Variable, um auf unser Canvas-Element hier oben zu verweisen . Also lass uns eins erstellen. Lass uns Canvas gleich Dokument, Punkt, Abfrageselektor und in Klammern innerhalb eines Canvas, hier sind ein paar Dinge im Gange. Lassen Sie mich das aufschlüsseln. Wir sind auf den Wert einer Variablen namens Canvas auf einen Ausdruck festgelegt . Es beginnt mit einem Dokument, dem es sich um ein JavaScript-Objekt handelt, das auf dieses HTML-Dokument verweist Punkt gibt an, dass wir etwas wollen , das Teil des Objekts ist In diesem Fall wird eine Funktion als Abfrageselektor bezeichnet wählt ein Sie wählt ein Element aus dem Dokument aus Wir müssen ihr den Namen des Elements geben , das wir auswählen wollten, und der Name ist eine Zeichenfolge Aus diesem Grund übergeben wir Canvas in einem einzigen Code. Dieser Name hier muss mit dem hier oben übereinstimmen. Der Name der Variablen muss nicht Canvas sein. Es könnte alles andere sein. Aber ich denke, es macht auch Sinn, es Canvas zu nennen. Okay, jetzt haben wir einen Verweis auf unseren Canvas, aber wir brauchen auch einen Verweis auf den Canvas-Kontext. Der Kontext muss dem Canvas-Punkt Get Context entsprechen. Diese Zeile ist der obigen sehr ähnlich, zumindest in ihrer Struktur. Wir erhalten ein Canvas-Objekt, rufen eine Funktion auf , die Teil davon ist, rufen den G-Kontext auf und übergeben einen Parameter als Zeichenfolge. Der Kontext ist der Ort, an dem wir tatsächlich zeichnen, und es können zwei D oder drei D sein. Im Moment interessiert uns der Zwei-D-Kontext. Jetzt können wir endlich etwas zeichnen. Geben wir context dot field wret ein. Field rect ist eine Funktion, die vier Perimeter benötigt X, Breite und Höhe. Ich werde 100, hundert, 404-hundert verwenden. Wir müssen immer die Klein- und Großbuchstaben überprüfen Klein- und Großbuchstaben Wenn nicht, wird es einen Fehler geben. Überprüfen Sie auch die Syntax. Überprüfen Sie weiterhin Ihr gesamtes Skript. Sicher und auffrischen. Und da ist unsere erste Form, die mit Code gezeichnet wurde. Lassen Sie mich erklären, was diese Zahlen bedeuten. Diese R-Koordinaten in einem Raum mit zwei D. Unsere Leinwand ist eine Fläche von 600 mal 600 Pixeln, und die 00 befindet sich hier oben in der linken Ecke. Die Werte, die wir in unserem Feld rect für X und Y verwenden , sind 100 und 100. Wir beginnen also bei Null, bewegen uns 100 Pixel nach rechts, 100 Pixel nach unten, und hier fangen wir an, die Form zu zeichnen. Dann gehen wir 400 Pixel nach rechts und 400 Pixel nach unten. Lassen Sie uns nun die Farbe unseres Rechtecks ändern. Die Standardfeldfarbe ist Schwarz. Wenn Sie etwas anderes wollen, müssen wir den Feldstil ändern. Bevor wir das Feld ruinieren, geben wir Context dot fill style ein, und dieses Mal ist es keine Funktion, sondern eine Eigenschaft Und die Eigenschaft ist genau wie eine Variable, die Teil eines Objekts ist In diesem Fall wird ein Wert gespeichert. Wir stellen es auf Blau. Sicher und neu, und da ist unser blaues Rechteck. Und hier verwenden wir die schnellste Funktion, die wir haben konnten, um etwas in unsere Leinwand zu zeichnen Feet ist eine Art Abkürzung. Es macht eigentlich drei Dinge gleichzeitig. Es erstellt eine neue Form, zeichnet ein Rechteck und füllt es mit etwas Farbe. Wenn wir etwas anderes machen wollten, wie zum Beispiel nur den Umriss des Rechtecks, müssten wir explizitere Anweisung schreiben. Zuerst müssen wir dem Kontext mitteilen, dass wir mit einer neuen Form oder einem neuen Pfad beginnen. Der Kontextpunkt beginnt mit dem Pfad. Dann müssen wir dem Kontext mitteilen, dass wir ein Rechteck zeichnen wollen, ohne es zu füllen. Kontaktieren Sie Punkt t, und wir können den gleichen Parameter verwenden, den wir vor 100 Hundert, 400, 400 verwendet haben. Dann könnten wir uns entscheiden, ihn entweder mit einer Farbe zu füllen oder nur den Umriss zu zeichnen, was ich mit dem Kontext-Punktstrich machen werde . Wenn wir jetzt aktualisieren, sehen wir gerade einen schwarzen Umriss um das blaue Rechteck. Machen wir es etwas einfacher, es zu erkennen, indem wir die Linienbreite erhöhen Die Linienbreite des Kontextpunkts entspricht vier. Wir könnten das blaue Rechteck auch ausblenden, indem die Zeile mit dem Feldbruch auskommentieren Wir müssen nur zwei für Schrägstriche am Anfang der Zeile eingeben Schrägstriche am Anfang der Zeile In Sublime Text gibt es dafür eine Abkürzung, die für einen Schrägstrich oder einen Befehl für einen Word-Slash gesteuert wird oder einen Befehl für Sie können sehen, dass die Zeile grau wird, was bedeutet, dass sie auskommentiert ist, und dass sie vom Browser beim Ausführen des Codes übersprungen Lassen Sie uns nun eine andere Form zeichnen. Lass uns einen Kreis zeichnen. Wir beginnen wieder mit dem Startpfad des Kontextpunkts, und die Methode zum Zeichnen eines Kreises heißt ARC-Kontextpunkt RC. Und woher wissen wir, wo die Methoden oder Eigenschaften für Canvas oder den Canvas-Kontext verfügbar sind? Wir müssen auf die Dokumentation verweisen. Es gibt ein paar Referenzdokumentationen online, und für Canvas neige ich dazu, diese für drei Schulen zu verwenden . Lassen Sie mich alles als eine einzige Liste sehen. Hier ist zum Beispiel ein Feldwrack, und hier ist die Linienbreite Das Wort Methode kann hier als Funktion gelesen werden. Es gibt einen subtilen Unterschied zwischen den beiden, aber wir müssen uns nicht darin verzetteln Wenn Sie die Methode verwenden, können Sie sich also eine Funktion vorstellen Die Mitte, die uns jetzt interessiert, ist Rc, also schauen wir uns das genauer an. Hier unten sehen wir, dass es sechs Perimeter benötigt, und der letzte ist optional, also konzentrieren wir uns auf die ersten X, Y-Radius, Startwinkel und Endwinkel. Ich möchte genau in der Mitte unserer Leinwand kreisen, die 600 mal 600 groß ist. X und Y werden also 303-hundert sein. Der Radius kann 100 sein und der Start - und Endwinkel wären Null bis 360, aber Winkel werden in Strahlkraft und nicht in Grad ausgedrückt. Wir brauchen also Null bis Pi mal zwei. In JavaScript wird die PI-Nummer so oft verwendet , dass sie bereits als Konstante gespeichert ist, und wir können mit dem mathematischen Punkt PI darauf zugreifen. Und dann müssen wir sie nur noch mit zwei multiplizieren. Um nun endlich den Kreis zu zeichnen, könnten wir Füllung oder Kontur verwenden, und ich werde wieder Kontur verwenden. Das ist also ziemlich gut. Wir lernen und wir zeichnen. Und jetzt werden wir das auch weiterhin tun. In der nächsten Lektion werde ich Ihnen etwas über Arrays und Loops beibringen 6. Arrays und Loops lernen: Bevor wir weitere Entwürfe entwerfen können, schauen wir uns zwei andere Programmierkonzepte an Wir werden mit Arrays beginnen. Die Array-Liste ist, ich gebe Ihnen gleich ein Beispiel. Lass deine gleich sein Hier haben wir eine Liste von Werten und wir können sie als Array erkennen , weil sie in eckigen Klammern stehen und die Werte durch cos getrennt sind Hier haben wir eine Liste von Werten und wir können sie als Array erkennen, weil sie in eckigen Klammern stehen und die Werte durch cos getrennt sind. Und das gilt für alle Arten von Werten Wir können ein Array von Zeichenketten erstellen. Lass das Menü gleich Start oder Mai sein. Nachtisch und Getränke. Was wäre, wenn wir jeden Punkt auf dieser Liste durchgehen wollten? Wenn wir Loops brauchen. Loops sind Codeblöcke , die für eine begrenzte Anzahl von Malen immer wieder ausgeführt für eine begrenzte Anzahl von Malen immer wieder In JavaScript gibt es nur wenige verschiedene Arten von Schleifen. Ich zeige dir den Klassiker für Loop. Für offene und geschlossene Klammern öffnen und schließen Sie die coole Innerhalb der Klammer Clear schreiben wir den Code, den wir mehrmals ausführen möchten Und innerhalb der Klammern schreiben wir einen Ausdruck zur Steuerung der Schleife, die aus drei Teilen besteht Im ersten Teil deklarieren wir eine Variable als Index der Schleife Traditionell verwenden wir den Buchstaben I und beginnen mit Zo, also sei I gleich Zo Und hier brauchen wir ein Semikolon , um das Ende des ersten Teils anzuzeigen Der zweite Teil ist die Dauer der Schleife oder wie oft wir laufen wollten Und wir wollten laufen, während ich weniger als vier Jahre alt bin. Und der dritte Teil ist das, was wir bei jeder Iteration des Loops mit I machen wollen jeder Iteration des Loops mit I Und wir wollen es um eins erhöhen, also ich plus gleich Das Inkrementieren um eins ist in der Programmierung sehr üblich. Es gibt also einen kürzeren Weg, dasselbe zu schreiben, nämlich I plus plus Damit sagen wir, dass wir bei Null beginnen und dann etwas ausführen, dann zu Eins wechseln und dann wieder etwas ausführen. Und dann zu zwei und zu drei. Und wenn wir bei vier sind, springen wir aus der Schleife raus und machen mit dem Rest des Codes weiter. Diese Schleife wird vier Iterationen lang laufen, was der Anzahl der Elemente entspricht, die wir in unserer Menüleiste haben. Wir können auf die Elemente des Arrays zugreifen, indem wir menu eingeben. Eckige Klammern. Ich hier, ich ändere seinen Wert 0-1 und dann zwei und dann drei Wir können diesen Followout jedes Mal sperren, wenn der Loop läuft. Und es gibt unsere Speisekarte mit Artikeln, die einzeln aufgelistet sind. Und das könnte etwas dynamischer sein. Nehmen wir an , wir würden unserer Speisekarte einen Artikel hinzufügen , zum Beispiel Beilagen. Und wenn wir das dann ausführen würden, würden wir es nicht auf der Konsole sehen , weil unser Loop viermal läuft und unsere Liste jetzt fünf Elemente enthält. Wir können die Zahl vier hier durch die Größe oder Länge unseres Arrays ersetzen . Minimale Länge. Nun, es spielt keine Rolle, wie lang das Array ist, wir werden immer alle Elemente durchgehen Und Schleifen dienen nicht nur zum Lesen von Werten aus einem Array, wir können sie auch verwenden, um zwei Arrays zu schreiben Lassen Sie uns diese Werte hier entfernen und sie als leeres Array belassen Und dann können wir eine weitere Schleife schreiben diesmal bis zu zehn. Hier wollen wir Werte in das Jahres-Array 2024 plus R übertragen das Jahres-Array 2024 plus . Nachdem die Schleife beendet ist, können wir den Wert von Jahren protokollieren und sehen, was darin enthalten ist. Wir sehen, dass wir das Array mit einem Wert 2024-2033 gefüllt haben. Wir können auch Schleifen zum Zeichnen verwenden, also machen wir das. Lassen Sie uns eine weitere Schleife erstellen fünfmal läuft, und darin schreiben wir etwas Ähnliches wie das, was wir zuvor geschrieben haben Der Pfad beginnt im Kontext. Kontext-Punkt-Wreck X und Y können bei 100 bleiben, aber Breite und Höhe sind jetzt 60 und dann Kontext-Punktstrich Wenn wir das ausführen, sehen wir hier oben ein weiteres Quadrat, aber lassen Sie uns die anderen Formen auskommentieren , um das etwas klarer zu machen Wir sollten fünf Quadrate sehen, aber wir sehen nur eines, und das liegt daran, dass wir sie übereinander zeichnen . Wir müssen jedes Mal etwas ändern, wenn die Schleife läuft. Wir könnten zum Beispiel sagen, dass X 100 plus 60 ist, was das breiteste mal I ist. Jetzt sehen wir alle fünf , oder wenn wir zwischen den Quadraten eine Lücke machen wollen, könnten wir 80 mal sagen. Aber dann sagen wir, wir wollen diese Lücke beibehalten, aber die Breite auf 40 ändern Wir müssten diesen Wert an zwei Stellen ändern, und das klingt nach einem guten Kandidaten für eine Variable Lassen Sie uns sie hier deklarieren. Lass die Breite gleich 60 sein. Die Höhe sei gleich 60. Sei X gleich 100. Sei Y gleich 100. Und dann verwenden wir sie im Parameter. Wir können auch eine Variable für eine Lücke erstellen, bei der die Lücke 20 entspricht, und dann X auf 100 plus aktualisieren Holz plus Lücke mal R. Wenn wir dabei sind, ändert sich nichts Aber wenn wir jetzt die Hölzer des Arrays ändern würden, würde der Abstand konstant bleiben Was wir jetzt haben, ist eine Reihe von fünf Quadraten. Was wäre, wenn wir mehr Reihen wollten? Wir würden eine weitere Schleife innerhalb unserer Schleife benötigen, oder mit anderen Worten, eine verschachtelte Schleife Wir benötigen auch einen weiteren Buchstaben für den Index der zweiten Schleife Und traditionell ist es der Buchstabe G. Dann müssen wir unseren Code innerhalb der zweiten Schleife im Subblin-Text innerhalb der ausgewählten Zeilen verschieben und Strg+Shift nach oben oder unten drücken, um sie zu verschieben Jetzt können wir Y genauso aktualisieren, wie wir es mit X gemacht haben. 100 plus Höhe plus Abstand mal G. Und wir entfernen die Rechtecke Alles, was wir in diese Schleife schreiben , wird 25 mal ausgeführt Wenn wir also eine andere Form zeichnen, würde sie ebenfalls 25 Mal erscheinen. Lass uns das machen. Kontext-Startpfad, Kontextpunkt Rect, und wir können das Rechteck jetzt etwas kleiner machen. X plus acht Y plus acht Breite -16 und Höhe -16. Und dann Kontext Dot Stroke. Was ist nun, wenn wir nicht wollen, dass dieses kleinere Quadrat in allen großen Quadraten erscheint ? Es ist Zeit für ein anderes Programmierkonzept. Bedingungen in JavaScripts sind denen im Englischen sehr ähnlich Wenn eine Bedingung etwas bewirkt oder etwas anderes bewirkt, brauchen wir nicht immer eine Wenn das sonst bedeutet, nichts zu tun, dann können wir es überspringen. Lassen Sie uns die Bedingung in unserer Schleife verwenden. möchte das kleine Quadrat nur zeichnen, wenn I größer als Null und kleiner als vier ist. Beachten Sie hier den aktuellen Operator , der ein logisches Ende bedeutet. Dadurch wird das kleine Quadrat in der ersten und in der letzten Spalte übersprungen . Wir könnten hier Ls schreiben und vielleicht in verschiedenen Formen zeichnen. Aber stattdessen werden wir uns etwas Interessanteres ansehen. Denken Sie daran, wann wir PI verwenden müssen, und ich sagte, es wird so oft verwendet , dass wir dafür eine Konstante haben. Nun, Zufallszahlen werden noch häufiger verwendet, und wir haben eine Funktion, um sie zu ermitteln. Mathe-Punkt zufällig. Diese Funktion gibt eine Zufallszahl 0-1 zurück , und das sind unsere Freunde Das Ergebnis ist jedes Mal anders, und das ist sehr interessant für uns , die Bilder mit Code erstellen Es führt ein gewisses Zufallselement ein. Lässt den Computer ein bisschen kreative Arbeit machen, ein bisschen generatives Design, wir könnten eine Zufallszahl in unserer Bedingung verwenden. Stattdessen könnten wir also sagen, dass wir das kleine Rechteck zeichnen wollen. Wenn die zufällige Zahl der mathematischen Punkte größer als 0,5 ist, diese Bedingung in durchschnittlich 50% der Fälle wahr. Immer nach dem Zufallsprinzip. Jedes Mal, wenn wir die Seite aktualisieren, erhalten wir an verschiedenen Stellen kleine Quadrate. Wir haben bis hierher ziemlich viel behandelt, aber bevor wir mit unserem Hello-HTML weitermachen, möchte ich etwas mehr über einige der Konzepte sprechen , die wir zuvor gesehen haben. Ich habe erwähnt, dass wir in JavaScript Variablen mit dem Wort let deklarieren. Es gibt auch eine andere Art, sie zu deklarieren, und das ist das Wort const Kosten stehen für konstant. Also verwenden wir es für einen Wert , der sich nicht ändern wird. Ein Beispiel könnte variabel für die Schwerkraft und ein anderes für die Geschwindigkeit sein. Schwerkraft ändert sich nicht, also sollten wir sie mit den Kosten angeben, und die Geschwindigkeit wird sich wahrscheinlich ändern. Wir würden sie also mit Blei deklarieren. Als Faustregel gilt, immer const zu verwenden , es sei denn, wir wissen, dass sich der Wert ändern wird Wir können das auf unseren Loop hier oben anwenden. Höhe und Abstand des Waldes ändern sich nicht, also könnten sie Konstanten sein Tatsächlich müssen sie nicht einmal innerhalb der Schleife deklariert werden Es würde genügen , wenn sie nur einmal außerhalb der Schleife deklariert würden , und das Gleiche gilt für X und Y. Aber wir wissen, dass sich ihr Wert ändern wird, also müssen wir für sie let verwenden Und da sie keinen Anfangswert haben, können sie beide in derselben Zeile deklariert werden Jetzt ändert sich die visuelle Ausgabe nicht, aber unser Code ist etwas übersichtlicher. Ich werde nicht über alle Arten von Schleifen in JavaScript sprechen , aber ich möchte Ihnen mindestens eine weitere zeigen, und zwar für jede Schleife. Erinnern Sie sich an unsere Menüanordnung. Wir können die einzelnen Elemente durchgehen, indem wir jeweils einen Minu-Punkt eingeben und dann Klammern öffnen, weil es sich um eine Und der erste Parameter ist das Element, über das iteriert wird. Und dann brauchen wir den dicken Pfeil und die offenen geschlossenen geschweiften Klammern. Innerhalb der Klammern können wir den Artikel genauso protokollieren, wie wir es zuvor getan Und da ist noch einmal unsere Artikelliste . In dieser Lektion haben wir viele Programmierkonzepte gesehen. Wir werden uns sehr bald wieder mit dem Code befassen und diese Konzepte immer wieder verwenden . Falls einige von ihnen noch nicht ganz klar sind, sich keine Sorgen, Sie können sie unterwegs auswählen. Am besten lernt man anhand von Beispielen, und wir werden viele davon sehen, während wir skizzieren Jetzt sind Sie mit weiteren Programmierkonzepten vertraut. In der nächsten Lektion werden wir uns einer Umgebung zum Skizzieren befassen 7. Umweltskizzen lernen: In den vorherigen Lektionen wollte ich Ihnen einen direkten Zusammenhang zwischen Wörtern, die wir in den Texteditor eingeben, und dem, was passiert, wenn sie vom Browser unterbrochen werden, zeigen die wir in den Texteditor eingeben , und dem, was passiert, wenn sie vom Browser unterbrochen werden Darauf kommt es immer an. Der Browser drückt immer etwas HTML und unterbricht irgendeinen Code. Aber wir müssen nicht jedes Mal bei Null anfangen. Im Laufe der Jahre hat die Community ein ganzes Ökosystem von Tools entwickelt ein ganzes Ökosystem von , um Dinge für den Browser zu schreiben, und das können wir nutzen. Jetzt werden wir ein paar Ebenen zwischen unserem Code und dem Browser hinzufügen . Die Komplexität wird etwas zunehmen, aber es gibt nichts, wovor man Angst haben müsste. Ganz im Gegenteil, von nun an wird es spannender werden. Wir werden noch ein paar Dinge installieren müssen. Das erste, was wir brauchen, ist ein Terminal. Sie müssen nichts installieren. Sie müssen nur zum Finder gehen und Terminal eingeben. Wenn Sie Windows verwenden, müssen Sie etwas herunterladen. Und auch hier gibt es ein paar Optionen und sie sind alle in Ordnung. Git für Windows oder Commander, oder in meinem Fall werde ich Cmdar verwenden Sie können aber auch CU verwenden, also wählen Sie, was Sie möchten Klicken Sie auf die Download-Schaltfläche und installieren Sie es. Wenn Sie es öffnen, sehen Sie ein Fenster wie dieses. Das Farbschema kann unterschiedlich sein, je nachdem , auf welcher Plattform Sie sich befinden oder welche Option Sie ausgewählt haben Aber im Wesentlichen ist es alles dasselbe. Als Nächstes müssen wir auch Node Dotgs zum Stillstand bringen. Gehen Sie also zu nodgs.org und laden Sie die neueste empfohlene Version herunter Nachdem die Installation abgeschlossen ist, können wir überprüfen, ob alles unser Terminal öffnen und Knoten V eingeben, sollten Sie hier die Versionsnummer sehen. Falls Sie etwas anderes wie den Befehl nicht gefunden sehen, müssen Sie möglicherweise Ihr Terminal schließen und erneut öffnen. Node ist jetzt unstid und enthält etwas namens PM, das uns sehr interessiert Lassen Sie uns überprüfen, ob es hier ist, indem wir PMV eingeben. MPM ist ein Paketmanager für JavaScripts. Es ermöglicht uns, Pakete und Bibliotheken zu installieren, die von der Community rekrutiert wurden Dies ist Teil des Ökosystems, von dem ich gesprochen habe. Wir werden eine Bibliothek namens Canvas Sketch gestalten, die sich hervorragend für kreatives Programmieren mit Canvas eignet. Canvas Sketch wurde von Matt Dier , einem Künstler und kreativen Programmierer, entworfen. Und ich würde auf jeden Fall empfehlen, sich seine Arbeit anzusehen. Aber lassen Sie uns vorerst mit dem Stillstand der Canvas-Skizze weitermachen. Wir müssen diese Zeile kopieren und in unser Terminal übergeben. Canvas-Sketch im PM-Stil, Cli G. Dadurch wird die Bibliothek mit PM blockiert und das G bedeutet, dass wir sie global installieren Wir können es also von überall aus ausführen, nicht nur von unserem aktuellen Ordner aus CLI steht hier für Command Line Interface, was bedeutet, dass wir einige Befehle für Canvas Sketch in unser Terminal eingeben können einige Befehle für Canvas Sketch in unser Terminal Sobald die Installation abgeschlossen ist, müssen wir zu dem Ordner wechseln, den wir für diesen Kurs erstellt haben. Ich gehe davon aus, dass einige von Ihnen mit Terminalbefehlen nicht besonders vertraut sind, also schauen wir uns einige davon kurz an. Klar. Wenn Sie den Bildschirm löschen möchten, klicken Sie auf CD, um das Verzeichnis zu wechseln. In meinem Fall möchte ich zu Dokumenten Java Visual wechseln. Falls Sie zu einem übergeordneten Ordner zurückkehren müssen, können Sie CD Dot Forward Slash eingeben Sobald wir den Namen einer vorhandenen Datei oder direkt eingeben , können wir die Tabulatortaste drücken Die automatische Vervollständigung und wir haben auch LS, um Dateien und Ordner im aktuellen Verzeichnis aufzulisten . Das ist natürlich mein Ordner, und ich hoffe, du hast deinen auch gefunden. Wir müssen einen weiteren Ordner darin erstellen, und der Befehl lautet MKDIR oder make directory und dann der Name des neuen Verzeichnisses Wir nennen es unsere Skizzen. Und dann CD-Skizzen für unseren neuen Ordner. Und hier werden wir Canvas Sketch verwenden , um eine neue Datei für uns zu erstellen Also geben wir zuerst Canvas sketch ein, dann den Namen unserer Datei, die dzero one dot gs skizzieren soll Und dann ist es neu zu sagen, dass wir wollen, dass es erstellt wird. Wenn Sie weitere Informationen zu diesen Befehlen wünschen, schauen Sie sich Canvas Sketch an. Lies mich auf Github. Jetzt gehen wir zurück zu unserem Ordner, wir können sehen, dass es ein paar neue Dateien gibt. Paket Dot GSO und Paket Dot Log Dot JSON. Es gibt Datendateien, die die Pakete verfolgen , die wir mit MPM gestartet Was wir wollen, ist Sketch 01 Dot Gs in unserem Editor zu öffnen. Wir können einen kleinen Standardcode sehen, der bereits für uns geschrieben wurde Lassen Sie mich erklären, was hier drin ist. Oben sehen wir eine Zeile mit einer Anforderung. Es ist wichtig, die Canvas-Skizzenbibliothek verwenden und einen Verweis darauf als Canvas-Skizze zu speichern. Dann haben wir ein Objekt namens Setting mit einer Eigenschaft namens Dimensionen. Diese Werte sind in Pixeln angegeben. Das bedeutet, dass ein Canvas-Element erstellt wird, das 2048 mal 2048 Pixel groß ist Dann haben wir eine Funktion namens sketch, die eine andere Funktion ohne Namen zurückgibt Diese anonyme Funktion heißt B Delivery selbst und gibt uns einige praktische Eigenschaften unserer Leinwand, wie Kontext, Breite und Höhe. In dieser Funktion sehen wir etwas Vertrautes. Wir haben einen kontextgefüllten Stil und einen Kontextfeldumbruch. Dies ist im Wesentlichen das Zeichnen eines großen weißen Rechtecks als Hintergrund für unsere Leinwand. Und die letzte Zeile ruft endlich Delivery auf und übergibt sowohl unsere Sketch-Funktion unsere Einstellung als Parameter. Wenn wir zu unserem Terminal zurückkehren, können wir diese Infozeile sehen, in der steht, dass Server läuft unter und dann die HTTP-Adresse. Dies sagt uns, dass der Canvas-Sketch den lokalen HTTP-Server begrüßt hat und wir ihn in unserem Browser öffnen können Anstatt also auf die HTML-Datei zu doppelklicken , um sie zu öffnen, besuchen wir jetzt die Webseite Diese Webseite befindet sich jedoch nicht auf dem Terminal, sondern nur auf unserem Computer. Kopieren Sie das und fügen Sie es in die Adressleiste ein. Und hier ist unsere Skizze. Es ist ein großes weißes Quadrat. Lassen Sie uns den Bildschirm erneut teilen, zur Hälfte für den Editor und zur Hälfte für den Browser. Wenn wir nun den Feldstil auf Blau ändern, können wir sehen, dass wir die Seite nicht mehr aktualisieren müssen . Der Canvas-Cache macht das automatisch. Wenn wir nach Änderungen in der GS-Datei suchen und die Seite jedes Mal aktualisieren, wenn wir sie speichern, könnten wir in unserer Hallos-GML dort weitermachen, wo wir aufgehört haben in unserer Hallos-GML dort weitermachen, wo wir aufgehört Wir können unsere verschachtelte Schleife kopieren und sie hier einfügen. Wir müssen nur ein paar Dinge anpassen. Wir können sehen, dass Breite und Höhe bereits als Parameter verwendet werden, also müssen wir unterschiedliche Namen für unsere Variable wählen. Lassen Sie uns das durch W und die Höhe durch H ersetzen Höhe . Jetzt setzen wir den Füllstil auf Weiß zurück, und schon ist wieder unser Raster für Rechtecke da Sie sind ziemlich klein, weil unsere Leinwand jetzt viel größer ist als zuvor Lassen Sie uns also die Dimension wieder auf 600 mal 600 ändern. Nun, das kommt mir sehr bekannt vor. Eines der coolsten Features von Canvas Sketch ist für mich, dass wir alles sehen können, was wir zeichnen Durch Drücken von Strg S oder Befehl S wird ein PNG aus dem Canvas generiert und standardmäßig in den Download-Ordnern gespeichert Wir können den Ausgabeordner ändern und verwenden, den wir für diesen Kurs erstellt haben. Gehen wir zurück zu unserem Terminal und drücken Strg C oder Befehl C die aktuelle Aufgabe zu unterbrechen und die Eingabeaufforderung zurückzubekommen Drücken Sie nun den Pfeil nach oben, um zum letzten Befehlstyp zurückzukehren Und hier wollen wir statt Dadu einen Strichstrich ausgeben und stellen es so ein, wollen wir statt Dadu einen Strichstrich ausgeben dass Schrägstrich 01 ausgegeben Jetzt läuft unser Sketch wieder, und wenn wir Control S oder Command S drücken, wird die Datei in unseren Ordner, Ausgabe 01, verschoben und da ist sie Ein weiterer Vorteil von Canvas Sketch ist, dass es sehr einfach ist, andere Dimensionen zu verwenden. Nehmen wir an, wir möchten unsere Skizze im Format A vier drucken Wir können unsere Abmessungen durch eine Zeichenfolge ersetzen. Eine Vier, und da wir drucken, benötigen wir auch eine höhere Pixeldichte. Wir können also 300 Pixel pro Zoll verwenden. Wir können die Ausrichtung des Papiers ändern und die Landschaft verwenden. Alle diese Einstellungen sind in der Canvas-Sketch-Dokumentation verfügbar. Sie werden wahrscheinlich feststellen , dass unsere Skizze fast verschwunden ist, als wir die Pixeldichten geändert haben Und das liegt daran, dass wir hier fest codierte Zahlen verwenden. Wir können unsere Skizze dynamischer gestalten, indem diese Zahlen im Verhältnis zur Größe der Leinwand setzen. Wir müssen sie als Prozentsatz festlegen. Also wollen wir das für Instagram vorbereiten. Wir müssen unsere Dimension bis 1080 auf 1080 ändern. Unsere Breite, die jetzt W ist, verwenden wir als Wert von 60, was 10% von 600 entspricht, sodass wir sie auf Breite mal 0,10 setzen können Und jetzt sind es immer 10% der Breite der Leinwand Und das Gleiche können wir für die Höhe tun 10% GAAP ergibt 20, was etwa 3% entspricht, was etwa 3% entspricht, also multipliziert mit 0,03 Und für X und Y könnten wir Variablen erstellen, die diese Zahl 100 hier unten ersetzen Also x für anfängliches X und Y für anfängliches Y. Hundert geteilt durch 600 ist ungefähr 17%, und dann müssen wir sie innerhalb der Schleife ersetzen Die Offsetwerte für das kleinste Quadrat hier unten könnten auch von einer Variablen stammen Lassen Sie uns also eine namens off erstellen. Früher waren es 16, was etwa 2% des Windes entspricht. Wir suchen nicht wirklich nach exakten Werten. Und jetzt müssen wir diese Zahlen durch zwei dividieren und dann durch und aus ersetzen . Wir müssen auch die Linie ändern , die früher vier war, aber wir können sie etwas dicker machen und sie auf 1% der Breite setzen. Jetzt können wir die Strg - oder Befehlstaste drücken, um ein paar Varianten zu speichern und uns unsere erste Skizze in unserem Ausgabeordner anzusehen . Wenn eines der Konzepte, die wir bisher gesehen haben , noch nicht klar ist, machen Sie sich darüber keine Gedanken. werden wir noch viele weitere Beispiele sehen diesem Kurs werden wir noch viele weitere Beispiele sehen. 8. Lerne etwas über Transformation: In dieser Liste werden wir mit einer neuen Skizze beginnen, und das Endergebnis wird so aussehen Um das zu erreichen, müssen wir etwas über die Canvas-Transformation und den Zustand des Kontextes lernen und den Zustand des Kontextes Lass uns graben. Gehe, um eine neue Skizze zu beginnen Das Terminal ist also immer noch im Projektordner geöffnet Wir geben Canvas sketch sketch 02, open ein. Dadurch wird eine neue Datei namens sketchs dot gs erstellt. Sie können es auch mit new erstellen. Sie müssen den Dash nicht öffnen. Und Öffnen ist nur ein neuer Tab im Browser. Wir können Skizze 02 in unserem Editor öffnen und sie sieht genauso aus wie Skizze 01, als wir sie erstellt haben. Lassen Sie uns die Abmessungen noch einmal auf 1080 mal 1080 ändern und auch den Bildschirm erneut teilen. Und wir beginnen damit, etwas Bekanntes zu zeichnen , ein schwarzes Quadrat. Stellen Sie also zuerst den Füllstil auf Schwarz ein. Dann der Kontextpunkt, der Pfad beginnt. Kontext-Punkt Rect, und wir übergeben X, Y, W und welche Variablen wir in Sekunden erstellen werden , und dann den Kontextpunkt füllen. Und jetzt brauchen wir, dass Kosten X gleich Null sind, Kosten Y gleich Null sind und dass Kosten W am breitesten ist, 30% der breitesten Fläche unserer Leinwand ausmachen können 30% der breitesten Fläche unserer Leinwand ausmachen können Also Breite mal 0,0 und Kosten , was 30% der Höhe unserer Leinwand entspricht Speichern Sie das und wir haben unser schwarzes Quadrat. Nun, wenn du es verschieben willst, gibt es zwei Möglichkeiten, es zu tun. Erstens wissen wir bereits, dass wir hier nur den Wert von X und Y ändern müssen . Die andere Möglichkeit besteht darin, den Kontext selbst zu transformieren. In diesem Fall übersetzt Context Dot Translate den Kontext mit X und Y. Ich zeichne das Rechteck jetzt bei Null Das Ergebnis ist dasselbe, aber es gibt einen grundlegenden Unterschied Ich kann mit Stift und Papier eine Metapher erstellen. Einer bewegt den Stift, während das Papier still steht, und der andere bewegt Papier, während der Stift still bleibt Wenn alle Transformationen, die wir machen wollen, nur Übersetzungen sind, gibt es keinen großen Unterschied zwischen den einzelnen Methoden, die wir verwenden Aber wenn wir mehr Transformation wie Rotation oder Skalierung anwenden wollen , dann macht das schon einen Unterschied können Sie ganz deutlich sehen, wenn wir versuchen, den Kontext zu rotieren. Lassen Sie mich wieder X und Y direkt direkt verwenden und diesen Übersetzungsaufruf auskommentieren Jetzt wollen wir den Kontext Punkt drehen und einen kleinen Winkel wie 0,3 übergeben Es stimmt, dass wir das Quadrat gedreht haben, aber wir haben es auch ein bisschen verschoben. Wir können sehen, dass der Ankerpunkt der Drehung außerhalb des Quadrats lag. Es war tatsächlich hier oben links der Leinwand, weil hier der Ursprung liegt. Das entsprach dem Drehen des Papiers und dem anschließenden Bewegen des Stifts. Nun, wenn wir stattdessen das Papier bewegen oder wenn wir den Kontext vor dem Drehen übersetzt und dann das Quadrat von Null aus gezeichnet haben, Null. Wir können sehen, dass die Drehung von links oben auf dem Quadrat und nicht von der Leinwand aus erfolgen würde . Jetzt wäre der Ausgangspunkt also hier oben. Und dann sehen wir den Vorteil der Verwendung von Kontexttransformationen. Unser Quadrat sieht ein bisschen seltsam aus, wenn es von oben links gedreht Es sieht aus, als wäre es rosa an einer Wand gewesen. Es würde schöner aussehen, wenn es von der Mitte aus gedreht würde, X und Y befinden sich bereits in der Mitte der Leinwand Also müssen wir anfangen, das Quadrat ab minus der Hälfte seiner Breite und minus der Hälfte seiner Höhe zu zeichnen minus der Hälfte seiner Breite und minus der Hälfte seiner Höhe Und natürlich gibt es keinen Unterschied zwischen Division durch zwei oder der Multiplikation mit 0,5 Damit es mit unserer Variablen hier oben konsistent bleibt, multiplizieren wir das mit 0,5 Eine Sache, die man bei dieser Transformation beachten sollte , ist, dass sie kumulativ sind Wir ändern den Zustand des Kontextes sobald wir das Papier bewegen und drehen, bleibt es dort Wenn wir eine andere Form zeichnen würden, würde sie an der Stelle beginnen, an der wir aufgehört haben. Ich zeige Ihnen ein kurzes Beispiel. Zuerst übersetze ich den Kontext 104 Hundert und zeichne dann einen Kreis. A Wenn wir beabsichtigt den Kreis zusammen mit dem Quadrat zu drehen, wäre das perfekt gewesen. Aber wenn wir nur den Kreis bei X 100 und Y 400 haben wollten, müssten wir zurückarbeiten und all unsere vorherigen Transformationen rückgängig machen, die sich schnell in Richtung Richtung bewegen würden Stattdessen können wir den Zustand des Kontextes zurücksetzen . Es funktioniert so. Zuerst speichern wir den aktuellen Status, dann führen wir unsere Transformationen durch und dann stellen wir den Zustand wieder her, in dem wir ihn zuvor gespeichert haben Also zuerst den Kontextpunkt speichern und dann den Kontextpunkt wiederherstellen Und jetzt sehen wir unseren Kreis, dessen Ursprung bei 104 hundert liegt. Wir brauchen den Kreis eigentlich nicht. Das war nur ein kurzes Beispiel. Von nun an werden wir das häufig verwenden. So ziemlich jede Transformation wir sehen, wird in Blöcken wie diesen ablaufen, angefangen mit einem Safe bis hin zur Wiederherstellung. Jetzt sind Sie mit Übersetzungen vertraut. In der nächsten Lektion werden wir weiter etwas über Transformation, Rotation und ein bisschen Trogonometrie lernen , Rotation und ein bisschen Trogonometrie 9. Mehr über Winkel erfahren: In dieser Hörprobe werden wir uns auf Rotationen konzentrieren. Wir werden sehen, wie man Winkel von Grad in Strahlkraft umrechnet Winkel von Grad in Strahlkraft umrechnet und mithilfe von Triognometrie um Leute, macht euch keine Gedanken über das Farbschema, denn ich verwende eine Es ist dasselbe, nur eine andere Farbe. Wenden wir uns nun hier unserem Drehwinkel zu. Dieser 03 ist strahlend, nicht in Grad. Radiant kann für manche Menschen verwirrend sein. Wir können lernen, sie zu verwenden, und uns daran gewöhnen , Dinge in Radiance zu berechnen Aber normalerweise ist es bequemer, mit Graden zu arbeiten , und es ist eigentlich sehr einfach, zwischen ihnen umzurechnen Nehmen wir an, wir möchten unser Quadrat um 45 Grad drehen , um die gleiche Strahlkraft zu erhalten Wir müssen es nur durch 180 teilen und es mit dem mathematischen Punkt Pi multiplizieren Diese Formel ist ziemlich praktisch, und wir wollen sie vielleicht wieder. Wir können sie in eine Funktion umwandeln, sodass wir nicht mehrmals dasselbe schreiben müssen. Ich nenne es Dog to Read. Es wird als Parameter ein Winkel in Grad verwendet. Und dann gib einen Grad zurück, geteilt durch 180 und multipliziert mit Pi Jetzt können wir einfach den Winkel in Grad verwenden. Damit können wir unsere Skizze etwas interessanter gestalten. Lassen Sie uns zunächst unsere Form verkleinern, wie ein sehr schmales Rechteck. Und ich möchte diese Form um den Kreis herum verteilen, wie die Stunden auf einer Uhr. Wir benötigen eine Variable für die Anzahl der Kopien der Form. Ich nenne es Num und setze es auf 12. Dann brauchen wir eine Vierschleife, die 12 mal läuft , und geben unseren Zeichencode hinein. Jetzt müssen wir den Drehwinkel basierend auf dem Index der Schleife ändern . Wenn wir uns eine Pizza vorstellen und sie in 12 Scheiben schneiden, welchen Winkel haben die einzelnen Scheiben? Die Pizza ist ein Kreis, also 360 Grad geteilt durch die Anzahl der Scheiben. Mit ein bisschen Mathematik können wir sagen , dass es 30 Grad sein werden. Aber denken Sie daran, wir wollen diese Zutaten, also müssen wir unsere Funktion verwenden, um sie umzuwandeln. Dies ist die Größe der Scheibe, und für den tatsächlichen Winkel benötigen wir eine weitere Variable. Kostenwinkel wird geteilt durch I. Das ist Null und dann 30 Grad und dann 60 Grad und so weiter Und dann müssen wir das in unserem Kontext verwenden, Punkt drehen. Und wir bekommen eine kleine Sternform. Um diesen Strich wie eine Uhr um den Kreis herum zu platzieren, brauchen wir ein bisschen Trigonometrie Trigonometrie geht es um die Beziehung zwischen den Seiten und den Winkeln der Es würde den Rahmen dieser Liste sprengen, Trigonometrie dieser Liste Aber wir können unser Gedächtnis schnell auffrischen . Hier ist eine Animation als Hilfe. Hier sehen wir, dass der Winkel mit der Zeit zunimmt und der Kosinus des Winkels in einem festen Intervall auf und ab geht in einem festen Intervall auf und ab geht Das Gleiche gilt für den Sinus der Winkel, und wir können sehen, dass es einen Offset zwischen Sinus und Kosinus gibt, beide Zuallererst benötigen wir also eine neue Variable für den Radius unseres Kreises , der mal 0,3 sein wird Und da wir dann für jede Form ein anderes X und Y haben werden, können wir unser vorhandenes X und Y in C X umbenennen und C Y zum Mittelpunkt unseres Kreises machen für jede Form ein anderes X und Y haben werden, können wir unser vorhandenes X und Y in C X umbenennen . Und dann deklarieren wir X und Y erneut, diesmal mit dem Let, weil wir ihren Wert innerhalb der Schleife ändern werden , und dort verwenden wir den Sinus und den Kosinus Wir werden X auf den Mittelpunkt des Kreises setzen. Wir werden X plus den Radius des Kreises multipliziert mit dem Sinus des Winkels sehen Kreises multipliziert mit dem Sinus des Winkels Also mathematischer Punkt, Sinus und in Klammern Winkel. Dann ein ähnlicher Ausdruck für Y mit C Y plus Radius multipliziert mit dem Kosinus des Winkels Das ist fast das, was wir wollen. Wir brauchen nur, dass sich der Hub andersherum dreht. Also müssen wir den Kontext auf den Minuswinkel drehen. Und hier ist unsere Uhr. Und wir könnten die Anzahl der Scheiben beliebig ändern . Ich behalte es vorerst bei 12. Eine Sache, die Ihnen vielleicht aufgefallen ist, ist, dass wir CX und C, Y zu X und Y hinzufügen. Wir könnten das auch in zwei Übersetzungsaufträge aufteilen In diesem Fall ändert sich das Endergebnis nicht. Ich zeige es dir nur als Alternative. Sie können also sehen, dass hier ein bisschen Flexibilität besteht. 10. Mehr über Utility-Funktionen erfahren: Einige Funktionen, die wir für diese Skizze verwenden , könnten auch für andere Skizzen nützlich sein Zum Beispiel möchten wir die Funktion vielleicht wieder verwenden, um Grad in Radianz umzurechnen In dieser Hörprobe werde ich Ihnen zeigen, wie Sie eine Bibliothek mit Hilfsfunktionen blockieren und verwenden können Um unsere Skizze interessanter zu gestalten, können wir auch mit der letzten Art der Kontexttransformation spielen , und das ist eine Skala. Die Skalierung benötigt zwei Parameter, X und Y, und der Standardwert ist eins. Wenn Sie also nichts ändern möchten, geben Sie einfach eines weiter. Wir könnten die Skala X oder die Skala Y ändern. Oder wir könnten wieder einen zufälligen Wert verwenden Hier mit einem zufälligen Wert sind manchmal einige Striche viel zu dünn Und das liegt daran, dass der Zufall bei Null anfängt, also 0-3 Es wäre schön, wenn sie von, sagen wir, eins auf drei gehen oder wenn wir einen Zufallsbereich überschreiten könnten Sagen wir einen Mindest- und einen Höchstwert. Um das 1—3 zu erreichen, müssten wir den Zufallswert mit drei minus eins multiplizieren und dann eins addieren. Auch dies ist eine weitere praktische Formel , die wir vielleicht noch einmal verwenden möchten, und wir könnten eine Funktion vier erstellen. Ich nenne es Random Ranch, und es benötigt zwei Parameter, minus und MX, und gibt dann einen mathematischen Punkt nach dem Zufallsprinzip zurück, max minus min plus meinen. Und dann können wir diesen Ausdruck durch Random Branch eins und drei ersetzen , was viel intuitiver und einfacher zu lesen ist. Bevor wir mit unserem Sketch weitermachen, möchte ich erwähnen, dass praktische Funktionen wie diese nicht nur für diesen Sketch praktisch sind. Es ist eigentlich ziemlich üblich, auf Szenarien zu stoßen , in denen wir solche Dinge gemacht haben Eine Sache, die wir tun könnten, wäre, eine Minimalbibliothek mit solchen Hilfsfunktionen zu erstellen und sie skizzenübergreifend zu verwenden, aber wir sind nicht die ersten, die diese Idee haben , und Bibliotheken wie diese existieren bereits Tatsächlich hat die Bibliothek, die wir verwenden, Canvas a Sketch eine Schwesterbibliothek namens Canvas Sketch Ut und sie enthält eine Sammlung dieser nützlichen Funktion. Schauen wir uns eine zufällige Datei an. Dies ist ein Wrapper, der eine Reihe von zufälligen Hilfsfunktionen enthält , darunter eine namens Ranch, die genau das Gleiche tut wie die Zufallsverzweigungsfunktion, die wir gerade erstellt Wenn Sie zur vorherigen Seite zurückkehren und auf Math klicken, werden wir natürlich auch Decor Red und andere finden, die sich später als nützlich erweisen könnten Anstatt also unsere eigenen Funktionen zu schreiben, können wir sie aus Canvas Sketch UTO importieren. Zuerst müssen wir es installieren. Gehen wir also zurück zu unserem Terminal und drücken Control C oder Command C , um den aktuellen Prozess zu beenden Und dann geben Sie NPM stall Canvas sketch UTL Sobald das fertig ist, können wir den Pfeil nach oben drücken, um zu unserem vorherigen Befehl zurückzukehren , und wir können die Bindestriche u und d Dash open entfernen die Bindestriche u und d , weil wir diese Skizze bereits verlassen und sie bereits in unserem Browser geöffnet ist Also wollen wir es einfach noch einmal ausführen. Jetzt zurück zum Code und oben in der Datei wollen wir sowohl mathematische als auch zufällige Daten importieren. C-Mathematik entspricht also Canvas-Sketch-Uth-Mathematik und dasselbe gilt für Random. Kosten: Zufälliger Schrägstrich. Und dann können wir unser Deck Rot durch Mathedeck auf Rot und unseren zufälligen Zweig durch Random Dot Ranch ersetzen Mathedeck auf Rot und unseren zufälligen Zweig durch Random Dot Ranch An unserer Leistung sollte sich nichts ändern. Und wir können sogar die Funktionen löschen, die wir zuvor erstellt haben, oder sie einfach dort belassen , falls Sie später darauf verweisen möchten. Also da hast du's. Jetzt haben wir eine Bibliothek mit Hilfsfunktionen, die wir für zukünftige Skizzen verwenden können In der nächsten Hörprobe werden wir dazu übergehen, Bögen und zufällige Vs zu verwenden, um mehr Grafiken zu erstellen Ein 11. Erlerne das Erstellen von Bögen: Vervollständige das Aussehen unserer Skizze. Wir werden noch ein paar Formen hinzufügen , um es interessanter zu machen. Wir werden wieder die Bogenfunktion verwenden , die wir zuvor gesehen haben. Diesmal nicht, um einen vollen Kreis zu zeichnen, sondern um einen tatsächlichen Bogen zu zeichnen. Lass uns einen Blick darauf werfen. Wir werden weitere Transformationen benötigen, die sich von denen unterscheiden, die wir hier verwenden. Wir benötigen also einen weiteren Block von Context Dot Save und Context Restore. Hier wollen wir in den Mittelpunkt des Kreises übersetzen . Also siehe X und siehe Y. Und auch um einen Minuswinkel gedreht Und dann fangen wir an, eine neue Form zu zeichnen. Kontextpunkt beginnt mit dem Pfad. Kontextpunkt. Kontext-Punktstrich für die Bogen X und Y, wir können bei Null oder Null beginnen, aber für den Radius können wir unsere Radiusvariable verwenden. Der Startwinkel kann Null sein und der Endwinkel kann Slice sein. Ich sagte, wir haben keinen vollen Kreis gezogen, aber am Ende hatten wir einen. Der Unterschied besteht darin, dass wir dieses Mal Stück für Stück gezeichnet werden. Wir können sehen, dass, wenn wir die Scheibe etwas kleiner machen, sagen wir, wir den Endwinkel zum Beispiel mit 0,6 multiplizieren . Wir können den Bogen auch am Strich ausrichten, indem einen negativen Startwinkel und einen positiven Endwinkel verwenden. Verwenden wir -0,3 und positive 0,3. Kann die Bögen auch etwas dicker machen , indem ich die Kontextlinie mit ändere, ich werde sie auf 20 setzen Jetzt, wo das erledigt ist, geht es nur noch darum, die Werte zu optimieren, um eine interessante visuelle Ausgabe zu erhalten Ich möchte zuerst mit der Skala der Striche spielen. Wir können den Bereich der Skala X auf 0,1 und zwei ändern. Und auch mit der Skala Y herumspielen und den Bereich auf 0,2 und 0,5 einstellen. Variieren Sie auch die Dicke der Bögen, also stellen Sie die Linie damit auf einen Bereich von 5 bis 20 Ich möchte den Strich auch etwas versetzen , damit sie nicht so gut ausgerichtet sind Da der Kontext bereits gedreht ist, kann ich das tun, indem ich die Y-Position des Rechtecks ändere. Anstatt also nur minus die Hälfte der Höhe zu nehmen, könnten wir sagen, zufälliger Punktschlüssel, von Null auf minus die Hälfte der Höhe Die gleiche Idee würde auch für die Bögen funktionieren, aber wir müssen nur den Bereich für die Radiusvariable festlegen Zufälliger Punktschlüssel von etwas, das kleiner als der ursprüngliche Radius ist, wie 0,7, zu etwas, das größer als der ursprüngliche Radius ist, wie 1,3 Oder wir können das etwas kürzer schreiben , mit Radiuszeiten, einem zufälligen Bereich von 0,7 bis 1,3, was wahrscheinlich einfacher zu lesen ist Wir können etwas Ähnliches tun und auch etwas Zufälligkeit für den Start- und Endwinkel hinzufügen etwas Zufälligkeit für den Start- und Endwinkel Schneide mal nach dem Zufallsprinzip, Punktbereich Null und -0,5. Und dann schneiden Sie die zufälligen Zweige Null und 0,5 in Scheiben. Ich denke, wir können diesen Effekt viel übertriebener gestalten. Wir können größere Zahlen verwenden. Lassen Sie uns also statt 0,5 einfach fünf verwenden. Und anstatt bei Null zu beginnen, können wir immer mindestens ein Stück zeichnen. Oder es noch weiter verbittern oder die eine Seite größer machen als die andere, also minus acht für den Startwinkel. Und dann könnten wir wiederum die Anzahl der Scheiben erhöhen , um das Ganze etwas komplexer zu machen. Und da haben wir es. Das ist unsere Skizze. Ich finde, es sah gut aus. Ich hoffe, du stimmst zu. Wir können die Seite natürlich aktualisieren, um einige Variationen zu sehen, und wir können die Ausgabe auch als Bild speichern, genau wie wir es mit der Skizze gemacht haben. Zuerst müssen wir zu unserem Terminal zurückkehren, Strg C, Befehl C, Pfeil nach oben drücken und den Ausgang, Ausgang 02, öffnen. Und jetzt zurück zum Browser, drücken Sie Control S oder Command , um einige Variationen zu speichern. Offensichtlich sind die Zahlen, die ich hier verwendet habe, keine endgültigen Zahlen. Ich habe nur mit den Werten experimentiert. Ich würde Sie ermutigen, mit den Zahlen zu spielen, verschiedene Werte auszuprobieren, vielleicht sogar Reihen in verschiedenen Formen auszuprobieren. Und in der nächsten Lektion werden wir mit einer neuen Skizze beginnen. 12. Mehr über Objekte und Klassen erfahren: Sie erinnern sich vielleicht aus früheren Lektionen, ich das Wort Objekt nur in wenigen Typen verwendet habe. Es ist an der Zeit, dass wir es uns genauer ansehen. Zuerst müssen wir eine neue Skizze erstellen, zum Terminal gehen und Canvas sketch, sketch 03 dot gs und dann new eingeben . Öffnen Sie dann Sketch 0.3 im Editor und ändern Sie dann die Dimension auf 1080 mal 1080. Lassen Sie uns jetzt über Objekte sprechen. Wir haben uns Objekte noch nicht im Detail angesehen, aber wir haben sie die ganze Zeit benutzt. Der Kontext ist ein gutes Beispiel für ein Objekt. Es hat Eigenschaften wie Context-Punktfeldstil und Methoden wie Context Dot Feel Rect. Ein weiteres Beispiel für ein Objekt, das viel einfacher ist als Context, ist unsere Einrichtung hier. Es ist ein Objekt mit einer einzigen Eigenschaft namens Dimensionen. Wir können es als Objekt erkennen, weil es mit den geschweiften Klammern beginnt und endet Und darin finden wir ein Paar aus Schlüssel und Wert. Denken Sie daran, dass bei Arrays mit eckigen Klammern die Werte durch Kommas getrennt sind Ihre Objekte sind ähnlich. Wenn wir immer einen Eigennamen oder einen Schlüssel haben, dann Colin and a Vallow, lass uns hier ein Beispiel schreiben konstante Punkt entspricht dem Aufruf der Klammern, X 800 Dies ist ein einfaches Objekt mit den beiden Eigenschaften X und Y. Wenn Sie es als kleinen Punkt auf dem Bildschirm zeichnen würden, könnten wir den Punkt Punkt beginnen Pfad, dann den Kontextpunkt Bogen, Punkt X, Punkt Y, Radius zehn, Null MPI Setzen Sie dann den Feldstil auf Schwarz und nennen Sie ihn Fill. Da wir es sind, die dieses Objekt verlassen, müssen wir hier nicht aufhören. Wir können ihm so viele Eigenschaften geben, wie wir wollen. Warum geben wir ihm nicht auch eine Radius-Eigenschaft? Jetzt wird das ein nützliches kleines Objekt. Wenn wir mehr Punkte auf dem Bildschirm zeichnen wollten, könnten wir mehr Kopien davon verwenden, und das bringt uns zu einem anderen Programmierkonzept, den Klassen. Klassen sind Rezepte für die Erstellung von Objekten. Wann immer wir mehrere Instanzen eines Objekts mit denselben Eigenschaften benötigen , können wir Klassen verwenden, um sie zu erstellen. Selbst wenn wir nicht mehrere Instanzen benötigen, sind Klassen dennoch nützlich, um den Code in verschiedene Entitäten zu organisieren . Schreiben wir eine Klasse für unser kleines Punktobjekt. Wir können zum Ende unserer Fill- und Type-Klasse gehen. Zeigen Sie mit der Maus auf und schließen Sie die geschweiften Klammern. Der Klassenname sollte üblicherweise mit einem Großbuchstaben beginnen Eine sehr wichtige Methode einer Klasse ist nun der Konstruktor Das wird mit einem neuen Objekt erstellt , wenn wir es erstellen Und wir können Parameter an den Konstruktor übergeben. In unserem Fall vier Punkte, wir wollen X und Y und Radius Jetzt müssen wir die Eigenschaften X, Y und Radius definieren. Und dafür brauchen wir ein anderes spezielles Wort namens dieses. Das Wort bedeutet, dass wir uns auf den Umfang dieser Klasse beziehen. Wie immer macht es mehr Sinn, ein Beispiel zu verwenden. Lassen Sie mich hier etwas eingeben. Dieser Punkt X entspricht X. Hier sagen wir, dass der Klassenpunkt eine Eigenschaft namens X enthält, und wir setzen ihren Wert auf einen Parameter, den wir an den Konstruktor übergeben werden an den Konstruktor übergeben Dieser Punkt X ist nur ein Wert, er könnte Null sein. Es könnte eine Pizza sein, aber wir setzen sie auf den X-Parameter , den wir übergeben. Falls das noch nicht klar ist, wird es in einer Minute Sinn machen, wenn wir ein Objekt mit unserem Klassenpunkt erstellen. Machen Sie vorerst einfach dasselbe für die anderen beiden Eigenschaften, die wir übergeben. Lassen Sie uns nun einen neuen Punkt erstellen. Stattdessen geben wir einen neuen Wert von 0,800, 410 ein. Die Werte sind dieselben und die Ergebnisse sind dieselben Aber dieses Mal haben wir mit einer Klasse einen Punkt erstellt. Jetzt sind wir bereit, mehr Punkte zu erstellen. Lassen Sie uns das in Punkt A umbenennen und dann einen Punkt B mit X 300 und Y 700 erstellen. Und dann duplizieren Sie diese Linien und zeichnen Sie auch Punkt B. Ich hoffe, es ist jetzt mit diesem Beispiel klar. Wir erstellen zwei Objekte , die Extensoren der Punktklasse sind und beide dieselbe Eigenschaft und dieselbe Struktur haben dieselbe Eigenschaft und dieselbe Struktur In diesem Sinne können wir mit der Erstellung unserer Skizze beginnen. Zuerst möchte ich ein paar Dinge ändern. Ich möchte den Punkt von dem Punkt trennen dem wir in die Leinwand gezeichnet sind. Ich denke, dieser Punkt könnte eine weitere Entität mit mehr als nur einer Position und einem Radius sein. Also werde ich eine weitere Klasse dafür erstellen und sie Agent nennen. Seine erste Eigenschaft ist eine Position oder einfach eine Pause, und Pose kann ein neuer Punkt sein. Ich denke, der Punkt sollte nur X bei Y haben. Dort braucht er keinen Radius Wir könnten den Radius zum Agenten bringen und den Punkt nur als Positionsdaten belassen und Agenten dann für alles verwenden , was wir zeichnen möchten können dem Radius bereits einen Wert von zehn geben und für die Positionen X und Y können wir sie in Parametern übergeben Jetzt können wir unsere Punkte umbenennen und sie Agent A und Agent B nennen und den dritten Perimeter entfernen, weil wir den Radius nicht mehr übergeben müssen Dann können wir für Drown diesen Code in unsere Klasse bringen. Lassen Sie uns das kopieren und eine neue Methode in unserer Agentenklasse namens draw erstellen Wir können es hier einfügen und dann X zu diesem Punkt Punkt X und dann Draht zu diesem Punkt Punkt Y und Radius zu diesem Punktradius verdrahten. Wir müssen auch Verweise auf den Kontext als Parameter übergeben. Um dann die Agenten zu zeichnen, können wir löschen, was wir vorher hatten, und dann Agen A Dot Draw und Agen B Dot Draw nennen . Bisher hat sich die Grafik nicht geändert, aber wir richten unseren Code ein, dass wir noch viel mehr tun können Lassen Sie uns mehr Kopien dieser Agenten zeichnen. Wir können ein leeres Array namens Agents erstellen. Erstellen Sie dann eine Schleife, um das Array mit, sagen wir, 40 Agenten zu füllen das Array mit, sagen wir, 40 Agenten Agenten, die die neuen Agenten X und Y pushen. Wir müssen X und Y erstellen, also konstant X und CY, und ich möchte, dass es sich um Zufallswerte handelt Also brauchen wir wieder unsere Funktion für zufällige Verzweigungen. Lassen Sie uns es aus der Canvas-Skizze importieren. Du auch. Dann ist X ein zufälliger Wert zwischen Null und Breite und Y zwischen Null und Höhe. Und jetzt, um den Agenten zu zeichnen, brauchen wir nur noch ein paar Linien. Wir können jedes Element in unserem Array mit dem Agentenpunkt für H durchgehen unserem Array mit dem Agentenpunkt . Der erste Parameter ist der Agent selbst. Und wir können es Alting Dot Row nennen und es mit Kontext übergeben. Wir sehen noch nichts, also muss irgendwo ein Fehler vorliegen. Schauen wir uns die Konsole an. Strg Shift I oder Command Shift I. Hier liegt ein Fehler vor, der besagt, dass Gras nicht definiert ist, und dass es auch in Zeile 12 passiert. Und das liegt daran, dass Wt nur hier definiert ist. Wir haben die Variable wit außerhalb dieser Funktion noch nicht , aber das ist eine weitere nette Sache an Compressed Sketch. Diese anfänglichen Eigenschaften sind auch in der Sketch-Funktion verfügbar. Wir können diesen Parameter also einfach kopieren und hier einfügen. Und jetzt sehen wir alle unsere 40 Agenten. Jetzt haben wir also unsere 40 Agenten auf dem Bildschirm. In der nächsten Lektion werde ich Ihnen zeigen, wie man sie animiert. 13. Eine Animation erstellen: In dieser Liste werden wir unsere Agenten weiterentwickeln und beginnen, sie rund um den Bildschirm zu animieren Bevor wir unseren Agenten ein wenig Verhalten geben, schlagen Sie einige Dinge vor Zuerst möchte ich ihnen einen variablen Radius geben, einen zufälligen Wert von 4—12 Und dann möchte ich hier, anstatt den Bogen in Pause X und Pause Y zu zeichnen, den Bogen in Pause X und Pause Y zu zeichnen, das verwenden, was wir in der vorherigen Lektion gelernt haben , und stattdessen den Kontext übersetzen Also den Kontextpunkt speichern, Kontextpunkt übersetzen, X pausieren und Y anhalten. Und das dann auf 00 ändern Und vergiss nicht, am Ende Context Dot Restore aufzurufen. Ich denke auch, dass die Agenten mit einem schwarzen und einem weißen Strich besser aussehen würden mit einem schwarzen und einem weißen Strich besser So können wir den Füllstil Schwarz entfernen und den Weißwert beibehalten, den wir hier eingerichtet haben Die Standardkontur ist bereits schwarz, also müssen wir nur fill und dann stroke aufrufen. Die letzte Sache hier ist, den Strich mit der Kontext-Punktlinie etwas dicker zu machen und ihn auf vier zu setzen. Jetzt wollen wir unsere Agenten dazu bringen, sich zu bewegen. Wir können ihnen eine neue Eigenschaft namens Geschwindigkeit oder VL geben. Diese Eigenschaft benötigt auch einen X- und Y-Wert, sodass es sich um einen anderen Punkt handeln kann. In diesem Fall wird das Wort Punkt nicht mehr verwendet. Es ist in Ordnung, Position als Punkt zu bezeichnen. Aber zu sagen, dass die Geschwindigkeit ein Punkt ist, ist ein bisschen seltsam. Wir müssen uns einen anderen Namen für unsere Klasse überlegen. Ich denke, ein guter Name dafür wäre Vector. Das ist ein bisschen Refactoring. Wir müssen den Namen an einigen Stellen ändern, und das ist in der Programmierung durchaus üblich Es ist kein Problem, Ihren Code im Laufe der Zeit neu zu bewerten und Dinge zu ändern, die Sie zuvor geschrieben haben Jetzt können wir unserer Geschwindigkeit zufällige X- und Y-Werte geben. Beide können von minus eins nach eins angeordnet werden. Und dann die Geschwindigkeit zu verwenden, ist ganz einfach. Wir müssen nur die Geschwindigkeit zur Position hinzufügen, und das können wir mit einer neuen Methode namens Update tun. Dieser Punkt Post x plus entspricht diesem Punkt L Punkt X. Und dann wieder dasselbe für Y. Jetzt in unserem Loop kurz vor Agent Draw rufen wir Agent Dot Update Nun, aber nichts ändert sich. Das liegt daran, dass wir in unserer Skizze nur eine Primzahl gezeichnet haben. Wenn Sie animieren möchten, müssen wir das in der Einstellung Animate True angeben Jetzt wird diese Funktion jedes Mal kalt, wenn der Browser bereit ist, den Bildschirm neu zu streichen Wir sollten mit 60 Bildern pro Sekunde passieren. Diese animierte Eigenschaft ist sehr praktisch, wie viele andere Dinge in Canvas Sketch Aber ich möchte dir auch zeigen, wie man so etwas ohne Canvas-Sketch bekommt Ich werde es als kurzes Beispiel schreiben und wir können es danach sogar löschen. Du musst nur wissen , dass es existiert. Lassen Sie uns eine Dummy-Funktion erstellen und sie auch Animate nennen. Darin werden wir nur etwas auf der Konsole protokollieren Sag visuell. Und dann müssen wir eine Browserfensterfunktion namens Request Animation Frame aufrufen , die der Browser immer dann auslöst wenn er bereit ist, einen weiteren Frame zu malen. Als Parameter übergeben wir die Funktion, die wir aufrufen möchten, über einen Frame In diesem Fall wird es unsere Funktion animate sein. Dann müssen wir Animate nur einmal aufrufen und sehen, was passiert Wir sehen, dass das Nachrichtenbild mehrmals protokolliert wird. Hier macht Animate also etwas und fordert dann den nächsten Frame an , der dann Animate erneut auslöst Und das erzeugt eine animierte Schleife. Intern macht Canvas Sketch genau das, wenn wir Animate durchlaufen Und die Funktion, die es verursacht, ist diese hier. Wir können das jetzt löschen und zu unseren Agenten zurückkehren. Oder wenn Sie es als Referenz hier belassen möchten, kommentieren Sie es einfach aus dem Call to Animate Sie haben vielleicht bemerkt , dass unsere Agenten dazu neigen, vom Bildschirm zu verschwinden, wenn wir den Sketch eine Weile laufen lassen Das liegt daran, dass sie nichts über die Grenzen unserer Leinwand wissen . Wir könnten ihnen sagen, dass sie sich erholen sollen, wenn sie die Grenzen erreichen Lassen Sie uns also eine neue Methode für unseren Agenten namens Bounce erstellen. Und wir müssen mit Wind und Höhe reingehen. Dann schreiben wir eine Bedingung, wenn dieser Posenpunkt X kleiner oder gleich Null ist, oder wenn diese beiden senkrechten Schrägstriche logisch oder so bedeuten, oder ob dieser Punkt in der Pose X größer oder gleich wid ist Was wir tun wollen, ist die Geschwindigkeit umzukehren. Höllenpunkt ist also x mal minus eins und dann genau das Gleiche für Y und Höhe In unserer Schleife kurz nach Update und Brow rufen wir Agent Toot Bounce Jetzt können wir sehen, dass sie sowieso nicht mehr laufen und in unserem Sketch bleiben . Okay, jetzt haben wir Umzugsagenten. Als Nächstes werden wir sie mit Leitungen verbinden. 14. Agenten mit Linien verbinden: Oh, in dieser Liste werden wir unsere Agenten mit den Leitungen verbinden, und um das zu tun, brauchen wir ein bisschen mehr davon Wir werden eine vertraute Formel überdenken , um die Entfernung zwischen ihnen zu ermitteln Der PythagoreTom. Wir werden Nistd für Loop brauchen . Sie erinnern sich vielleicht, dass ich in unserer ersten Skizze einen geschrieben habe. Es bedeutet eins für eine Schleife in einem anderen. Denn I ist gleich Null, ich kleiner als Agent Punkt Link, und dann wollen wir innerhalb der ersten Schleife den Agenten als Variable speichern. Agent entspricht Agenten, eckige Klammern I. Dann die zweite Schleife mit G als Index. Und wir wollen den Agenten hier auch als Variable speichern . Wir werden es nennen, dass ein anderer gleich zwei Agenten ist, G. Also gehen wir für jeden Agenten jeden anderen Agenten Um nun die Grenze zu ziehen, müssen wir zwei Methoden anwenden Verschiebe zwei und Zeile zwei. Zuerst beginnen wir mit einem neuen Pfad, dem Kontaktstartpfad. Dann bewegen wir unseren Stift an den Anfang der Zeile mit dem Kontextpunkt Move Two Und es wird ein alternder Punktpunkt und ein alternder Punkt Punkt Y sein . Dann brauchen wir die zweite Kontext-Punktlinie und übergeben das Ende der Linie, was ein Punkt Pos Punkt X sein wird. Noch eine Punkt-Pause oder Y. Und dann kontaktieren Sie Dot Stroke Im Moment haben wir 40 Agenten. Das bedeutet also 40 mal 40, was 1.600 Iterationen in jedem Frame entspricht. Das ist in Ordnung Der Computer kann das, aber es ist ein bisschen verschwenderisch, weil wir jedes Agentenpaar sorgfältig überprüfen. Wenn ich zum Beispiel eine Null ist, gehen wir über G Null, eins, zwei, drei usw. Wenn ich eins ist, gehen wir wieder über Null, eins, zwei, drei, also rücksichtsvoll weiter Nur das Paar 01. Wir werden zu einer Linie übereinander gezogen, eins 0-1 und ein anderes 1-0 Und wir vergleichen auch Null gegen Null und Eins gegen Eins, was unnötig ist Das können wir mit jeder einfachen Änderung verbessern. Für ein G, anstatt bei Null zu beginnen, könnte es bei I plus eins beginnen. Also jetzt, wo ich Null ist, wird G eins sein. Bis wir 38 haben, wird G 39 sein, und diese zweite Schleife wird nur einmal ausgeführt, weil jedes andere Agentenpaar zu jedes andere Agentenpaar Zeitpunkt bereits überprüft worden wäre. Mit dieser einfachen Änderung ist die Anzahl der Iterationen auf Ihrem Frame von 1.600 auf 780 gesunken Das ist eine gute Leistungsverbesserung . Jetzt ist es an der Zeit, die Grafik zu verbessern. Das ist ein bisschen zu intensiv für meinen Geschmack. Ich möchte die Grenze zwischen den Agenten ziehen, die sich nahe beieinander befinden, nicht zwischen allen. Dafür brauchen wir ein bisschen Mathe. Satz des Pythagoras, der Name ist kompliziert, aber seine Formel ist so einfach aber Nehmen wir an, wir haben zwei Punkte auf der D-Ebene Zuerst ermitteln wir den Abstand zwischen ihnen auf der X-Achse Nennen wir es DX. Dann finden wir den Abstand auf der Y-Achse und nennen ihn DY. Das gibt uns ein rechtwinkliges Dreieck. Und was wir finden wollen, ist der Potenus. Ptagoren sagen uns , dass dies die Quadratwurzel einiger Quadrate der Seiten sein wird die Quadratwurzel einiger Quadrate der Seiten Lassen Sie uns das in unserer Skizze verwenden. Wir können es als Methode unserer Vektorklasse hinzufügen. Nennen wir es get distance und wir übergeben einen anderen Vektor. Ich nenne es dx , das ist X minus V Punkt x dy wird dieser Punkt Y minus V Punkt Y sein. Die tatsächliche Entfernung, die wir zurückgeben wollen, ist MT Punkt Quadratwurzel, dx mal dx plus dy mal dy Jetzt, zurück in unserer verschachtelten Schleife, können wir eine neue variable kalte Disc beenden den Abstand zwischen der Position eines alternden Punktes und einer anderen Punktposition und einer anderen Punktposition Jetzt, wo wir die Entfernung haben, können wir sagen, dass wir die Linie nur ziehen wollen , wenn der Abstand kleiner als einige Zahlen ist Sagen wir 200, oder wir können das Gegenteil tun und sagen, wenn dist größer als 200 ist, dann kümmern wir uns nicht um den Rest des Codes innerhalb der Schleife. Fahren Sie einfach fort. Die Continue-Anweisungen sagen, gehe zur nächsten Iteration der Schleife Also alles nach Continue wird ignoriert. Das sieht schon viel besser aus, aber es gibt noch eine weitere Sache , die ich damit machen möchte, und das ist, die Linie damit zu ändern, sie auf der Entfernung auszurichten. Ich möchte, dass die Linien dick sind, wenn Agenten geschlossen sind, und dass sie immer dünner werden je weiter sie auseinanderdriften. Dafür können wir eine weitere praktische Utils-Funktion namens Mapren verwenden namens Mapren Das setzt einen Eingangsschlüssel und einen Ausgangsschlüssel voraus ordnet den Wert zwischen den beiden Lassen Sie uns also noch einmal das Math-Modul aus der Canvas-Skizze in importieren Math-Modul aus der Canvas-Skizze Und dann können wir die Linie anhand der Entfernung festlegen . einem Bereich von 0 bis 200, wenn die Entfernung Null ist, möchten wir, dass die Linie 12 Wenn es 200 ist, wollen wir, dass es eins ist. Und da haben wir's. Ich habe dir bereits gezeigt, wie man Skizzen als Bild exportiert, aber dieses Mal bewegt sich unsere Skizze, also müssen wir sie als Video exportieren Und genau das werde ich dir in der nächsten Lektion beibringen 15. Mehr über Videoausgabe erfahren: Unsere Skizze ist fertig und wir könnten die Steuerung drücken, um ein paar Frames zu speichern. Aber da es sich bewegt, wäre es auch schön, es als Video zu exportieren. Schauen wir uns an, wie man das mit Canvas Sketch macht. Aus der Dokumentation geht hervor, dass wir Frame-Sequenzen exportieren oder FF-NPH-Streaming verwenden können, bei dem die bereits kodierten Sequenzen als MP Four-Datei ausgegeben werden. Das wollen wir tun. Also müssen wir zuerst sicherstellen, dass wir FF NPH haben und es beibehalten und wir können diese Zeile hier kopieren und in unser Terminal einfügen Drücken Sie erneut Strg C , um den aktuellen Vorgang zu beenden , und fügen Sie den Befehl hier ein. Global ist dasselbe wie G, das wir zuvor gesehen haben. Es installiert die Pakete global, nicht nur im aktuellen Ordner. Sobald der Vorgang abgeschlossen ist, drücken Sie die Pfeiltaste nach oben, verschieben Sie sowohl den neuen Ordner als auch den geöffneten Anschließend legen wir für unseren Ausgabeordner gestrichelte Ausgabe auf Ausgabe 03 fest. Und für das Streaming müssen wir einen Dash Stream hinzufügen. Jetzt läuft unser Sketch wieder und wir können Strg Shift S oder Command Shift S drücken Shift S oder Command . Damit wird der Export der Frames gestartet. Warten Sie dann einfach ein paar Sekunden und drücken Sie den gleichen Befehl erneut. Drücken Sie Shift S, um es zu stoppen. Schauen wir uns den Ausgabeordner an und da ist unsere nette Animation. Unsere Sketch-Sammlung wächst und wird immer interessanter. In der nächsten Lektion werden wir eine neue Skizze erstellen. 16. So erstellst du Raster: In dieser Liste werden wir ein Raster erstellen, aber auf eine andere Art als zuvor Flexibler und effizienter. Das Endergebnis wird so aussehen. Lass uns einen Blick darauf werfen. Zuerst müssen wir eine neue Skizze erstellen. Im Terminal geben wir Canvas Sketch ein. Fang 04 neu an. Teilen Sie dann den Bildschirm erneut auf. Ich hoffe auf Skizze 04 im Editor und ändere die Abmessung auf 1080 mal 1080. Wir können damit beginnen, einige Variablen zu deklarieren , um unsere Note zu beschreiben Wir wollen vier Spalten und drei Zeilen. Die Gesamtzahl der Zellen wird multipliziert mit Zeilen. Kann auch in einer Variablen mit der Breite des Rasters gespeichert werden, die 80% der Breite der Leinwand ausmachen wird. Und das Gleiche gilt für die Höhe des Rasters, ebenfalls 80% der Höhe der Leinwand Damit können wir auch die Breite und Höhe jeder Zelle des Rasters ermitteln Sell W entspricht der Breite des Gitters geteilt durch die Nummer einer Spalte Und Zelle H ist die Höhe des Gitters geteilt durch die Anzahl der Zeilen. Wir können auch rund um das Raster eine Emergenz feststellen, die den Unterschied zwischen der Größe des Rasters und der Größe der Leinwand darstellt. Marge entspricht also Wodith minus Gitter W. Und da es zwei Emergins auf einer linken und einer auf der rechten Seite gibt , wollen wir die Hälfte Das Gleiche gilt für Marg Y t minus Gitter dies erledigt ist, müssen wir nun jede Zelle des Rasters durchgehen , damit wir etwas mit ihnen anfangen können Und dafür brauchen wir die vier Schleifen. Anstatt wie zuvor zwei für Schleifen zu verwenden, eine pro Spalte und eine für Zeilen, werden wir nur eine verwenden und Spalte und Zeile mit einfacher Mathematik berechnen. I gleich Null ist kleiner als Zahl sllsi plus plus. Um die Spalte zu berechnen, benötigen wir den Restoperator Aufrufe sind gleich I, Restrufe. Dies gibt den Rest der Division von I nach Aufrufen zurück. Lassen Sie uns die Konsole verwenden , um ein paar Werte zu testen. Ich fange bei Null an und rufe vier an. Also 44 entspricht Null, vier entspricht Eins, dann zwei und Und wenn wir bei vier sind, ist der Rest jetzt wieder bei Null. Dann fünf zurück zu eins. Während also der Wert von I in Eins-Schritten steigt, wird der Wert von Core auf 0-3 moduliert Es wird also Null, eins, zwei, drei, 01, zwei, drei sein, was genau das ist, was wir brauchen, um die Rasterzellen auf der X-Achse zu finden Um nun die Zeile zu finden, ist die Logik etwas anders. Es könnte verlockend sein, etwas Ähnliches zu tun und den Rest-Operator erneut zu verwenden Diesmal mit der Anzahl der Zeilen, aber sie würden hier korken. Denn während ich zunimmt, bewegen wir uns von links nach rechts. Um also das Ende der Zeile zu finden, müssen wir die Nummern der Spalten überprüfen. Das können wir mit dem mathematischen Punktfluss machen. Ich teile es durch Spalten. Lassen Sie uns erneut die Konsole zum Testen verwenden. 0/4 ist Null, 1/4 ist 0,25, und wenn wir dann den Wert unterschreiten, das heißt, wenn wir ihn auf die nächste Ganzzahl abrunden, wird dieser zu die nächste Ganzzahl abrunden, wird dieser Zwei ergibt ebenfalls 03. Und dann kommen wir zu vier, es gibt uns eins und fünf ist auch eins. Das bedeutet, dass alle vier Schritte der Wert der Zeile um eins erhöht wird, was wir brauchen, um die Notenzellen auf der Y-Achse zu finden . Der nächste Schritt besteht darin, die X- und Y-Werte jeder Zelle anhand von Zeile und CO zu ermitteln. X wird mit Zelle multipliziert, W, und Y ist go multipliziert mit Zelle. Wir werden innerhalb jeder Zelle eine Linie zeichnen, und ich möchte, dass sie etwas kleiner als die Also werde ich eine andere Variable für Breite und Höhe erstellen andere Variable für Breite und Höhe W wird 80% von Zelle W und H 80% von Zelle sein, jetzt sind wir bereit zu zeichnen. Beginnen Sie mit dem Speichern des Kontextes und der Kontextwiederherstellung. Dann übersetzen wir den Kontext mit X und Y. Dann bewegen sich der Startpfad und der Kontextpunkt um zwei, und wir wollen minus die Hälfte der Linienbreite Und dann Kontextzeile zwei, Hälfte der Breite der Linie Und schließlich macht der Kontext einen Strich durch. Wir können jetzt etwas sehen, aber es sieht noch nicht richtig aus. Wir müssen unsere Verschmelzungen berücksichtigen , wenn wir die Kontexte übersetzen Wir könnten zu X und Y März X und Mar Y hinzufügen. Oder wir könnten eine weitere Kohle zur Übersetzung hinzufügen Das ist ein bisschen besser, aber immer noch nicht richtig. Die Sache ist, dass wir die Linien von der Mitte jeder Rasterzelle aus zeichnen , aber wir übersetzen nur den Ursprung nach oben links von jeder Zelle Also brauchen wir noch eine Übersetzung die Mitte der Zelle Kontext-Punkt übersetzen, Zelle W mal 0,5 und Zelle H mal 0,5. Das sieht jetzt richtig aus. Hier verwenden wir drei Aufrufe, um es zu übersetzen, damit ich Ihnen zeigen kann , was jeder Schritt bewirkt. Aber wenn Sie es vorziehen, können Sie diese Volumes auch direkt zu X und Y hinzufügen und Translate nur einmal aufrufen Das überlasse ich vorerst dir. Jetzt, wo wir unser Raster sehen können, ändern wir die Zeile damit auf vier und erhöhen die Anzahl der Zeilen und Spalten auf zehn Diesmal verwenden wir also die Smarter-Methode, um ein Raster zu erstellen, aber das ist nur ein flaches Raster In der nächsten Lektion werden wir etwas Zufälligkeit hinzufügen 17. Manipulieren von Formen mit Rauschen: Um unsere Skizze interessanter zu machen, werden wir ihr etwas Zufälligkeit hinzufügen Aber dieses Mal werden wir verschiedene Zufallszahlen verwenden, wir werden Rauschen verwenden Generate-Funktion ist ein unverzichtbares Werkzeug im Nutzbereich eines kreativen Codos Im Wesentlichen ermöglicht es uns, die Zufälligkeit zu kontrollieren. Der klassische Geräuschalgorithmus wurde 1983 von Ken Perlin begrüßt 1983 von Ken Perlin und ist als Perlin-Rauschen bekannt Ich werde einen Link zu einer Seite mit einer schönen Erklärung seiner Funktionsweise posten , wenn Sie mehr über den Algorithmus erfahren möchten mehr über den Algorithmus erfahren möchten Was wir in unserem Sketch verwenden werden, ist eine andere Variante namens Simplex-Noise und sie 2001 veröffentlichen Hier sehen wir eine visuelle Darstellung eines Geräusches, genauer gesagt eines Drei-D-Rauschens auf einer Zwei-D-Ebene Die Grauwerte sind Zahlen im Bereich von 0 bis 1, wobei Null für Schwarz und Eins für Weiß steht Wir können sehen, dass die Flaschen nicht immer völlig zufällig sind , wie im Fernsehen. Stattdessen scheinen sie gut ineinander zu fließen. In diesem Beispiel sehen wir Pa bei gleichem Rauschen unterschiedliche Zoomstufen . Sie bewegen sich alle mit derselben Geschwindigkeit, aber ihre Skalen sind unterschiedlich oder ihre Frequenzen unterscheiden sich von sehr körnig bis sehr glatt wir nun eine Vorstellung davon haben, was Geräusch ist, wollen wir es in unserer Skizze verwenden Wie Sie anhand dessen, was wir bisher gesehen haben, vielleicht vermutet haben, gibt es bereits eine Geräuschbibliothek wir in unseren Code integrieren können Und wieder einmal, Canvas Sketch macht uns das schon sehr praktisch Wenn wir zur zufälligen Seite auf Canvas Sketch zurückkehren, werden wir Ihnen sagen, ob Sie mithilfe von Simplex-Rauschen herausfinden können, ob Sie Rauschen verwenden Eindimensional, zweidimensional, drei und vier. Gehen wir also zurück zu unserem Code und fort, wie es der Zufall verlangt Leinwandskizze, du schneidest nach dem Zufallsprinzip. Dann können wir eine Zufallszahl generieren und sie N nennen gleich dem zufälligen Punktrauschen zwei D, und dann X und Y übergeben. Wir können N verwenden, um den Drehwinkel der Linien in unserem Gitter festzulegen Drehwinkel der Linien in unserem Wir benötigen also eine weitere Variable namens Winkel und setzen sie dann auf das N-fache des mathematischen Punktes PI Rauschen bis D, gib eine Zahl zwischen minus eins und eins zurück. Wenn wir es also mit dem mathematischen Punkt PI multiplizieren, erhalten wir das Äquivalent von negativem 180 Grad zu positiven 180 Grad. Um das in Aktion zu sehen, müssen wir unseren Kontext nur um einen Winkel drehen Rotationen sind etwas chaotisch, und das liegt daran, dass die Werte von X und Y zu groß sind Die Frequenz ist zu hoch. Wir könnten sowohl X als auch Y mit einer winzigen Zahl wie 0,001 multiplizieren mit einer winzigen Zahl wie 0,001 Der Einfachheit halber haben wir hier auch diesen dritten optionalen Parameter namens Frequenz, der genau das Gleiche bewirkt Dann sind die Dinge etwas weniger chaotisch, wir könnten auch die Amplitude auf eine kleine Zahl wie 0,2 ändern die Amplitude auf eine kleine Zahl wie 0,2 Aber das würde auch dazu führen, dass N im Bereich von -0,2 und 0,2 statt minus eins und eins liegt Ich möchte es bei minus eins zu eins oder nein belassen. Also werde ich den Winkel stattdessen mit 0,2 multiplizieren. Und damit sehen wir, dass die Linien anfangen, gut zu fließen. Wir könnten dasselbe Geräusch auch verwenden , um den Maßstab der Linien zu ändern. Lassen Sie uns eine neue Variable namens Scale erstellen. Auch hier wollen wir multiplizieren und zwar mit einer Zahl wie 30. Der Bereich liegt zwischen minus eins und eins, aber wir wollen keine negative Skala. Hier müssen wir es also einem Bereich von 0 bis 1 zuordnen. Es gibt ein paar verschiedene Möglichkeiten , das zu tun. Eine einfache Möglichkeit besteht darin, eins zu addieren und das durch zwei zu teilen. Hier würde der Bereich also zwischen 0 und 2 liegen. Und nach der Division durch zwei würde es 0-1 gehen. Wir können das schnell testen, indem wir die Linie damit maßstabsgetreu einstellen Eine andere Methode, die ziemlich identisch ist, besteht darin, N mit 0,5 zu multiplizieren und 0,5 zu addieren. Hier gibt es keinen Unterschied. Immer noch neu zuordnen und minus eins und eins auf Null und eins Die andere Art, das zu tun, ist natürlich die Utility-Funktion namens Kartenbereich, die wir in der vorherigen Lektion gesehen haben namens Kartenbereich, die wir in der vorherigen Lektion Importieren wir es hier aus Canvas SketchUtlash. Und dann ordnen Sie den Bereich basieren Sie auf N von minus eins und eins bis eins und Im Wesentlichen machen diese Formeln alle dasselbe. Kartenreichweite ist vielleicht etwas praktischer, und wir können damit auch einen Mindestmaßstab festlegen. Wir gehen jetzt von 1 bis 30, während wir vorher von 0 bis 30 gehen. Das Letzte, was ich hier tun möchte, ist, die Nullen zu animieren. Wir wissen bereits, wie man die Skizze animiert. Wir müssen nur animierte Elemente zu unserer Umgebung hinzufügen. Wenn wir uns dann die Dokumentation zur Canvas-Skizze ansehen, stellen wir fest, dass eine der Eigenschaften, die sie an die Renderfunktion übergibt die Renderfunktion übergibt Nummer des gerenderten Frames ist. Also müssen wir hier oben nur einen Frame deklarieren. Und dann können wir es in unserer Nuss-Funktion verwenden, T mit X plus Frame Nun, das bewegt sich, aber sehr langsam. Wir können es schneller machen, indem Frame mit einer größeren Zahl wie zum Beispiel zehn multiplizieren. Diese Skizze wird etwas komplexer. Jetzt gibt es eine Regel für mehr Variation, und darauf werden wir uns in der nächsten Lektion konzentrieren. 18. Erstelle GUI-Folien: Speichern Sie den besten Teil des Prozesses für das Ende. Wir werden ein Bedienfeld mit einigen Schiebereglern erstellen , um die Werte in unserer Skizze zu optimieren Die Bibliothek, die wir verwenden werden, heißt Tweak Pane und wurde von Hiroki Kaku Bon entwickelt Wir müssen zurück zum Terminal gehen, den Streich zurückholen und dann PM I Tweak Pane eingeben PMI ist die Kurzversion von PM und SAL, die wir bisher verwendet haben Beide Befehle sind exakt identisch. Sobald die Installation abgeschlossen ist, klicken Sie Pfeiltaste nach oben und führen Sie unseren Canvas-Sketch-Befehl erneut aus. Ohne D Dash neu und D Dash offen. Da wir schon hier sind, könnten wir genauso gut den Ausgang da öffnen Ausgängen 04 entspricht So können wir später einige PNGs exportieren. Jetzt müssen wir Tweak Pain vermitteln. Cost Tweak Pain entspricht erforderlichem Tweak Pain. Nach unserer Sketch-Funktion werden wir eine neue Funktion namens Quit Pain erstellen Hier können wir den Schmerz als Variable speichern und ihn auf den neuen TwickPain Punkt Pain setzen Klammern öffnen und schließen. Um dann zu überprüfen, ob alles gut funktioniert, müssen wir Quick Pain kurz vor der Leinwand eine Skizze aufrufen Wenn Sie den grauen Balken noch nicht sehen, überprüfen Sie die gesamte Syntax Ihres Codes und überprüfen Sie auch die Buchstaben. Jetzt sehen wir den grauen Balken von Garth hier oben, was bedeutet, dass die Farbe da ist, aber sie ist immer noch leer Jetzt können wir UI-Komponenten hinzufügen. Der erste wird ein Ordner sein , den wir auch als Variable speichern können. Dafür benötigen wir eine Methode von Pain namens Ed Folder. Wir können ein Objekt mit einigen Parametern übergeben, und eine der Optionen ist der Titel. Also Pine-Dot-Ordner und dann Titelraster jetzt in diesem Ordner, ich möchte ein paar Schieberegler hinzufügen Das können wir mit einer Methode machen, die bei der Eingabe aufgerufen wird. Und wie wir hier im Beispiel sehen können, müssen wir ein Objekt und den Namen der Eigenschaft des Objekts übergeben . Also müssen wir zuerst ein Objekt erstellen, um unsere Parameter zu speichern. Ich werde es hier oben erstellen. Außerhalb der Funktion zum Beenden des Fensters , sodass sie für unsere Sketch-Funktion sichtbar ist. Ich nenne es Perms, wie im Beispiel, aber in Kleinbuchstaben Es ist ein Objekt. Also geschweifte Klammern, und dann werden die ersten beiden Eigenschaften Aufrufe und Zeilen sein, beide mit einem Vallo von zehn Dann können wir zurück zu CretPN gehen und Ordner dot d input eingeben Params-Aufrufe und dann ein Objekt, das den Bereich bestimmt. Ich werde ein Minimum von zwei und ein Maximum von 50 und einen Schritt von eins festlegen und dann genau dasselbe für Zeilen Speichern Sie das und wir haben ein paar Schieberegler 2-50. Der letzte Schritt besteht darin, dass unsere Skizze diese Werte verwendet. Wir müssen nur unsere Aufrufe und Zeilen aktualisieren, variabel, um Perimeter-Punkt-Aufrufe und Parameter-Punktros zu verwenden und Parameter-Punktros Jetzt können wir unser Raster im Handumdrehen ändern. Und wenn wir das mit Spalten und Zeilen machen können, warum sollten wir hier aufhören und noch mehr Slider für Scale, Minimum und Scale Max hinzufügen Minimum und Scale Max Also zuerst der Parameter, setze den Standard auf eins und 30, so wie wir sie im Moment haben. Und dann Eingabe hinzufügen, Minimum skalieren und diesmal 1-100 Und wir müssen diesen Schritt nicht spezifizieren, weil Bruchteile mit der Skala in Ordnung sind Kopieren Sie das für das Skalenmaximum und ersetzen Sie den Wert in unserer MA Branch-Funktion. Wir können auch die Rauschwerte wie Frequenz und Amplitude manipulieren . Lass uns einen anderen Ordner dafür erstellen. Geben Sie Noise ein und fügen Sie dann Eingabe hinzu. Freak bedeutet -0,01, maximal 0,01. Duplizieren Sie die Linie für die Karte, maximal eins und mindestens Null Erstellen Sie die Eigenschaften innerhalb von Perimetern. Also der Standardwert für Frequenz 0,001 und Amplitude Und dann ersetze sie in der Renderfunktion. Schau, was sie tun. Es ist einfacher zu verstehen , wenn wir viele Reihen und Kegel haben. Das sieht interessant aus, aber es ist ziemlich klar , dass sich etwas von rechts nach links bewegt. Das liegt daran, dass wir den Wert von X in unserer Funktion Noise Two D erhöhen den Wert von X in unserer Funktion Noise Two D Wir könnten das durch eine Noise-Three-D-Funktion ersetzen und den Frame als dritte Dimension verwenden Lass uns das versuchen. Kommentieren Sie das Rauschen drei D aus und übergeben Sie als dritten Parameter Frame-Time Ten. Und jetzt haben wir einen Antrag, der etwas organischer ist, ohne dass die Richtung klar ist. Wir könnten auch die Frame-Nummer manuell festlegen , sodass wir die Animation auf einem bestimmten Frame positionieren können. Dafür benötigen wir zwei UI-Komponenten. Eine ist eine Tabelle, die animiert werden soll oder nicht, und die andere als Schieberegler zum Einstellen der Frame-Nummer Drittens, zuerst die Parameter, Animate auf True und Frame auf Null gesetzt Dann wird die Eingabe einfach animiert, ohne zusätzliche Optionen Twig Pain versteht bereits, dass dies ein wahrer oder falscher Parameter ist Und noch eine Eingabe für einen Frame mit einem Minimum von Null und einem Maximum von 999. Wo verwenden wir Frame? Hier oben zeige ich Ihnen, wie Sie einen bedingten Ausdruck in einer einzigen Zeile schreiben können. Lassen Sie uns eine Variable mit dem Namen F erstellen . Ich möchte, dass der Wert von F frame ist, wenn Parameter animate wahr ist, oder parameters dot frame ist, wenn animate falsch ist Das können wir in einer einzigen Zeile tun. Dieses F entspricht einer Perimeterpunktanimation. Fragezeichen-Rahmen, Collins, Dauerwellen-Punktrahmen. Das ist die Bedingung. Dies ist der Wert, wenn die Bedingung wahr ist, und dies ist der Wert s. Oder wenn die Bedingung falsch ist. Dieser Ausdruckstyp wird als ternärer Operator bezeichnet. Jetzt verwenden wir statt Frame F. Lassen Sie uns das versuchen Bisher hat sich nichts geändert. Wenn wir jedoch Animieren einschalten, verwenden die Noten zunächst den Wert eines Frames, der durch den Schieberegler festgelegt wurde Das Letzte, was ich Ihnen hier zeigen möchte , ist, dass wir, da wir Linien zeichnen, auch den Linienabstand ändern können Es gibt drei mögliche Werte: rund und quadratisch. Um diese in unserem Panel auszuwählen, benötigen wir einen anderen Komponententyp nämlich eine Liste von Zeichenketten Zuerst erstellen wir den Parameter, nennen ihn Line Gap und setzen ihn auf den Standardwert, der schlecht ist. Fügen Sie dann eine weitere Eingabe hinzu, und ich werde sie oben im Rasterordner hinzufügen. Und als dritten Parameter müssen wir die Option wie das Optimierungsfenster übergeben Beispiel, rund und quadratisch. Dann gleich nach der Zeile damit. Stellen Sie den Kontext ein Punkt, der Linienabstand entspricht dem Parameter „Punkt, Linienabstand“. Jetzt haben wir ein Drop-down-Menü, und wir können sehen, wie es mit einer runden Lücke oder mit einer quadratischen Lücke aussieht mit einer runden Lücke oder mit einer quadratischen Lücke Ich hoffe, Sie stimmen zu, dass es sehr praktisch ist , dieses Bedienfeld hier zu haben , anstatt Werte einzugeben und unsere Skizze zu aktualisieren. Wir können einfach mit diesem Slider und den Tests im Handumdrehen spielen Tests im Handumdrehen Sie könnten versuchen, weitere Komponenten für andere Werte hinzuzufügen , die wir verwenden, wie die Geschwindigkeit Ihrer Animation oder vielleicht die Länge der einzelnen Striche oder eine andere Tabelle, die zwischen verschiedenen Formen wechselt Sagen wir, wenn Sie Kreise statt Linien zeichnen möchten, könnten Sie Table verwenden, um zwischen ihnen zu wechseln Das müssen Sie erkunden. Mit einem solchen Bedienfeld erstellen Sie Ihr eigenes Werkzeug, um mehr Kontrolle über Ihre Skizze zu haben. Als zusätzliche Ressource finden Sie weitere Informationen dazu mit Schmerzen und einer weiteren Komponente. Fühlen Sie sich frei, mehr davon zu verwenden und die Skizze in jede gewünschte Richtung zu bringen. 19. Text erstellen lernen: In dieser Lektion werden wir eine solche Skizze erstellen, und dafür müssen wir etwas über Text lernen, wie man einen Text zeichnet, wie man ihn misst und wie man die Eigenschaften einer Schrift festlegt. Starten Sie eine neue Skizze, gehen Sie zum Terminal und geben Sie Canvases, Sketch, Sech 05 ein, Hälfte des Bildschirms für den Browser und die Hälfte für den Texteditor Abmessung 1080 mal 1080. Unser Ziel ist es, einen großen Buchstaben in die Mitte unserer Skizze zu zeichnen. Dafür benötigen wir eine neue Methode namens Feldtext, die wir noch nicht verwendet und auch ein paar Texteigenschaften wie diese, die die Kontext-Schriftart festlegt. Beginnen wir damit, den Feldstil auf Schwarz zu setzen. Und dann können wir die Kontext-Punktschrift so einstellen dass sie 400 Pixeln serf entspricht Dann können wir Feldtext verwenden , der drei Parameter benötigt Zeichenfolge sowie X- und Y-Koordinaten. Also Kontext-Punkt-Feldtext, in Großbuchstaben, Null Wir sehen noch nichts, und das liegt an einer Datentexteigenschaft, die als Textbasislinie bezeichnet wird Der Standardwert ist alphabetisch, was bedeutet, dass der Text von unten gezeichnet wird Damit wir ihn mit diesen Koordinaten sehen können, müssen wir die Textgrundlinie nach oben ändern Oder wenn wir das in der Mitte unserer Skizze haben wollen, müssen wir es in die Mitte ändern und dann müssen wir den Kontext in die Mitte der Skizze übertragen . Wir wissen bereits, wie das geht. Kontext Punkt speichern, Kontext Punkt wiederherstellen. Und Kontext übersetzt Breite mal 0,5 und Höhe mal 0,5. Jetzt scheint der Buchstabe vertikal zentriert zu sein , aber nicht horizontal. Also müssen wir noch eine weitere Texteigenschaft namens text align ändern . Der Wert, nach dem wir suchen, ist Mittelpunkt. Jetzt scheint die Glyphe zentriert zu sein. Lass es uns größer machen . Lassen Sie uns die Schriftgröße auf 1.200 Pixel ändern die Schriftgröße auf 1.200 Pixel Wir können sehen, dass es nicht ganz in der Mitte ist. Tatsächlich ist es um ein ganzes Stück daneben. Die Sache ist, dass Schriften komplexe Strukturen sind. Das Setzen der Grundlinie auf die Mitte garantiert nicht, dass der Körper der Glyphe zentralisiert wird , wie wenn wir es mit der primitiven Form zu tun Um das richtig zu machen, benötigen wir mehr Informationen über die Schrift Dafür gibt es eine Methode , die als Maßtext bezeichnet wird, und die Himmelsreferenz auf W drei Schulen sagt uns, dass sie die Breite des Textes zurückgibt. Aber diese Methode macht tatsächlich mehr als das. Wir können das auf der entsprechenden Seite von NDM sehen, hier heißt es, dass Measure-Text ein Objekt namens Textmatrix zurückgegeben hat, und Textmatrix hat zwar eine Eigenschaft namens Breite, aber sie hat auch eine Menge mehr Wir sehen, dass alle anderen Eigenschaften außer Wd diesen Lab-Icon-Text haben, was bedeutet, dass sie immer noch als experimentelles Merkmal dieses Objekts betrachtet werden als experimentelles Merkmal dieses Objekts betrachtet Aber lassen Sie uns jetzt etwas weiter nach unten scrollen und die Browserkompatibilität überprüfen. Trotz ihres experimentellen Status werden die meisten von modernen Browsern bereits gut unterstützt. Zu Beginn des Kurses habe ich erwähnt, dass Sie jeden beliebigen Browser auswählen können. Und obwohl das immer noch stimmt, Sie hier einen Vorteil haben, wenn Sie sich für einen modernen Browser entscheiden können Sie hier einen Vorteil haben, wenn Sie sich für einen modernen Browser entscheiden. einem alten Browser könnten Sie eine gute Näherung erhalten, aber Sie müssten mit dem Auge beurteilen , wann Sie die Übersetzung korrigieren einem modernen Browser können wir mit diesen Matrixeigenschaften viel genauer mit diesen Matrixeigenschaften Also lass uns das machen. Zuerst wollen wir unseren Brief in einer Variablen speichern, die ich Text nennen werde. Dann wollen wir den Text messen , den ich auch in einer Variablen namens Matrix speichern werde . Kontext-Punktmesstext Schauen wir uns die Daten in der Matrix mit der Punktprotokoll-Punktmatrix der Konsole an. Diejenigen, die uns interessieren, sind die ersten vier, die den eigentlichen Begrenzungsrahmen beschreiben Seit unserer ersten Skizze wurden uns Boxen gezeichnet, und wir wissen, dass ihr Ursprung oben links liegt Deshalb werde ich den Text „Mittig ausrichten“ auskommentieren und den Standardwert links beibehalten. Außerdem setze ich die Grundlinie wieder nach oben Und wir können vorerst auch kommentieren und übersetzen. Dann wollen wir unsere üblichen XY-, W- und H-Variablen, diesmal aber für die Matrix. Ich werde ihnen das Präfix X als Matrixpunkt voranstellen. Tatsächliches Begrenzungsfeld links mal minus eins. Mein aktueller Bounding-Box-Akzent mal minus eins. Und W tatsächliche Begrenzungsbox links plus tatsächliche Begrenzungsbox Und schließlich, MH, der eigentliche Bounding-Box-Akzent plus der tatsächliche Bounding-Box-Abstieg Mal sehen, was dabei herauskommt. Wir können schnell den Begrenzungsrahmen mit einem Umriss, einem Kontextpunkt, einem Startpfad, einem Kontextpunkt g xMyNWH und einem Kontext-Punktstrich zeichnen Startpfad, einem Kontextpunkt g xMyNWH und einem Kontext-Punktstrich Nun, das ist der eigentliche Begrenzungsrahmen rund um die Klippe. Wir können auch mit anderen Klippen testen. Um dies in der Mitte unserer Skizze auszurichten, können wir etwas Ähnliches tun wie wir es in unserer Notenskizze gemacht haben. Kosten X sind gleich Zwei, minus NW mal 0,5 minus X und CY-Höhe minus H mal 0,5 minus Y. Und dann haben wir und CY-Höhe minus H mal 0,5 minus Y. den Kontext in X und Y übersetzt . Und dann haben wir ihn Ich habe die Glyphe richtig zentriert. Wir werden natürlich mehr damit machen, aber bevor wir fortfahren, möchten wir vielleicht eine andere Schriftart wählen oder vielleicht die Schriftgröße ändern Lassen Sie uns hier also ein bisschen aufräumen. Lassen Sie uns die Textvariable außerhalb dieser Funktion an den Anfang der Datei verschieben und sie auch mit einem Let deklarieren, falls wir sie später ändern und zwei weitere Variablen deklarieren möchten sie später ändern und zwei weitere Variablen deklarieren Die Schriftgröße entspricht 1.200 und die Schriftfamilie entspricht Leibeigener. Die Font-Eigenschaft ist eine einzelne Zeichenfolge, daher müssen wir diese Ich zeige Ihnen zwei Möglichkeiten, das zu tun. Wie wir bereits in unserer allerersten Lektion gesehen haben, müssen wir nur diese Zeichenketten zusammen mit den Pluszeichen addieren . Schriftgröße plus Px-Leerzeichen plus Schriftfamilie. Und der andere Weg ist mit den Vorlagenliteralen, die es uns ermöglichen, Variablen oder Ausdrücke in die Zeichenketten einzufügen Variablen oder Ausdrücke in die Zeichenketten Lassen Sie uns diese Zeile duplizieren und herausnehmen. Vorlagenliterale werden nicht durch Codes definiert, sondern durch Also Bectics für die erste Variable, Dollarzeichen, geschweifte Klammern, dann PX und dann Dollarzeichen und geschweifte Klammern ausrichten Die erste ist die Schriftgröße und die zweite die Das Ergebnis ist dasselbe. Die Praxis besteht jedoch darin, Vorlagenliterale zu verwenden, aber jetzt wissen Sie, dass es zwei verschiedene Möglichkeiten gibt, dies zu tun können die Schriftart gerne ändern, wenn Ihnen die Sie in Ihrer Skizze gesehen haben, nicht gefällt Sie können auch eine Variable für den Schriftstil oder die Schriftstärke erstellen . Ich werde mich vorerst nur an die Standardschrift von Sara halten. Nehmen Sie sich etwas Zeit, um die Schriftart auszuwählen, mit der Sie arbeiten möchten. Und wenn Sie bereit sind, werden wir uns in der nächsten Lektion treffen. 20. Mehr über Async erfahren: In unserer Skizze ist jetzt ein einziger Buchstabe eingezeichnet. Wäre es nicht toll , das zu aktualisieren und wir eine Taste auf unserer Tastatur zu drücken? Daran werden wir in dieser Lektion arbeiten. Wir müssen uns Ereignisse anhören , die in unserem Browserfenster passieren , und das Fenster , an dem wir interessiert sind, heißt Key. Wir könnten auch Key Down verwenden, was der eigentliche Tastendruck ist, aber ich bevorzuge eine Tasten-App, die ausgelöst wird, wenn die Taste losgelassen wird Wir brauchen eine Leitung wie diese. Dokumentieren Sie den Punkt, der Ereignis-Listener , Key, und dann ist der zweite Parameter die Funktion, die aufgerufen wird , wenn das Ereignis eintritt Lassen Sie uns einen mit dem Namen Key upp erstellen. Const auf Key up. Es erhält ein Event-Objekt als Parameter. Und vorerst können wir dieses Objekt einfach protokollieren. Eine der Eigenschaften des Event-Objekts ist eine Zeichenfolge mit einer Taste , die gedrückt wird. Wir könnten unsere Textvariable auf diese Taste setzen. Das war also ziemlich einfach. Aber unsere Skizze ändert sich nicht. Wir müssen ihr sagen, dass sie aktualisiert und erneut gerendert werden soll , wenn sich die Textvariable ändert. Eine schnelle Lösung wäre hier , animate true zu unserer Einstellung hinzuzufügen, wie wir bereits gesehen haben Aber das würde bedeuten, die Skizze in jedem Frame zu aktualisieren , obwohl wir das eigentlich nur machen müssen, wenn die Taste gedrückt wird Um das richtig zu machen, muss ich einen Umweg machen und ein paar Minuten damit verbringen, ein anderes Programmierkonzept zu erklären , eine synchronisierte Funktion Bisher stützte sich der gesamte Code, den wir geschrieben haben , auf einer impliziten Regel, dass alles synchron läuft Sobald wir eine Codezeile schreiben, können wir davon ausgehen, dass das, was wir geschrieben haben, wahr und etabliert ist , wenn wir zur nächsten Zeile kommen Wenn wir zum Beispiel sagen, dass X gleich fünf ist, können wir in der nächsten Zeile sicher sein, dass X plus eins nur sechs ergibt. Nehmen wir an, wir wollten, dass X mir ein Bild lädt, was eine Funktion ist , die es nicht gibt, es ist nur ein Beispiel. Dann wollen wir in der folgenden Zeile versuchen, mit der Breite des Bildes zu lesen. Dies würde uns einen Fehler geben , da das Bild einige Zeit zum Laden benötigt. Wenn der Browser diesen Code ausführt, wird er in dieser Zeile nicht aufhören. Warten Sie, bis das Bild geladen ist, und fahren Sie dann mit dem Rest des Codes fort. Es wird alles synchron laufen lassen. Beim Laden ist ein Bild die Aufgabe des Synchronizers. Um diese Mischung aus Synchronizern und Synchronizer-Aufgaben zu bewältigen , haben wir in JavaScript ein Konzept namens Promise, was ein sehr passender Name ist. Der Browser sagt: Okay, ich werde das ausführen, aber es wird eine Weile dauern also statt des Ergebnisses Nehmen Sie also statt des Ergebnisses das Versprechen an , dass ich Ihnen das Ergebnis geben werde , wenn es fertig ist. Lassen Sie mich vorerst mit dem Rest des Codes weitermachen. Wir werden dann in der Lage sein die Breite des Bildes zu ermitteln, das wir hier laden möchten. Wir müssen das nur etwas anders schreiben , mir ein Bild laden dann etwas mit X-Punkt damit machen. Das ist offensichtlich kein echter Code. Aber lassen Sie uns weitermachen und diese Funktion zum Laden einiger Bilder tatsächlich implementieren , damit wir ein funktionierendes Beispiel haben können. Wir können ein zufälliges Bild von PixM am unteren Ende erhalten. uns egal, um welches Bild es sich handelt, solange es welche enthält Und dann speichern Sie diese Variable namens URL. Und dann lade mir ein Bild. wenn man einen Real als Grenze nimmt, Und wenn man einen Real als Grenze nimmt, gibt es ein neues Versprechen Aus der Dokumentation geht hervor, dass es sich um eine Funktion mit zwei Parametern „ resolve“ und „reject Dann ein fetter Pfeil und eine geschweifte Klammer. In dem Versprechen werden wir ein neues Bild erstellen und dessen Quelleigenschaft, die Quelle, auf die URL setzen , die wir weitergeben Sobald das Bild eine Quelle hat, beginnt der Browser bereits damit, es zu laden. Wir wollen also andere Eigenschaften vor der Quelle setzen. Ich möchte mg dot load, eine Funktion, die der Browser aufruft, wenn das Bild fertig geladen ist , und die unser Versprechen einlösen und das MG-Objekt selbst übergeben würde . Und on roll, möchte unser Versprechen ablehnen. Dann könnten wir eine weitere Funktion namens start haben, die der Einstiegspunkt unseres Codes wäre. Ignoriere vorerst den Rest unserer Skizze. Wir werden in einer Minute darauf zurückkommen. Aber jetzt tu einfach so, als ob das der ganze Code ist, den wir hier haben. Nur diese beiden Funktionen innerhalb von Start können sagen, lade mir ein Bild dann in dieser Funktion dieses Versprechens Und der erste Parameter ist das, was wir innerhalb von resolve übergeben. Also dann EMG, fetter Pfeil, und dann können wir das Bild damit und den EMG-Punkt damit protokollieren Und um zunächst die Reihenfolge zu sehen , in der dieser Code ausgeführt wird, schauen wir uns auch etwas anderes direkt nach diesem Code an, etwa diese Zeile Dann müssen wir nur noch Start ausführen und uns die Konsole ansehen. Also hat der Browser diese Zeile zuerst ausgeführt, obwohl sie nach dem vorherigen Protokoll erscheint. Und das liegt daran, dass Load Misumimage ein Versprechen ist , das erst einige Zeit später erfüllt Hier haben wir also eine Synchronizer-Funktion und eine Syncronizer-Funktion. Hier haben wir also eine Synchronizer-Funktion und eine Syncronizer-Funktion. Aber was wäre, wenn wir wollten, dass der Browser auf die N-Synchronisierungsaufgabe wartet Das können wir mit etwas namens Wait machen. Wenn wir etwas innerhalb einer Synchronizer-Funktion ausführen , können wir dem Browser sagen, dass er warten soll Oder mit anderen Worten, wir können diese Aufgabe synchron ausführen diese Aufgabe synchron Ist das verwirrend? Schauen wir uns ein Beispiel an. Lassen Sie uns eine Kopie unserer Startfunktion erstellen. Kommentieren Sie einen von ihnen und lassen Sie ihn hier nur als Referenz stehen. Dann wollen wir Start in eine asynchrone Funktion umwandeln , indem wir davor ein Sync eingeben Jetzt können wir diesen Ausdruck darin so ändern, dass B ENG dem Gewicht entspricht Lade mir ein Bild und dann lade das Bild damit und logge diese Zeile Speichern wir das und überprüfen wir die Konsole erneut. Jetzt ist die Reihenfolge der Protokolle umgekehrt, oder sie ist tatsächlich dieselbe, wie wir sie im Code haben Selbst wenn wir ein Bild laden, was eine Aufgabe ist, von der wir nicht wissen, wie lange es dauern kann, wartet der Browser jetzt darauf Warum habe ich mich auf all das eingelassen? Weil Canvas Sketch eine synchronisierte Funktion ist. Es gibt ein Versprechen mit einem sogenannten Sketch Manager zurück mit einem sogenannten Immer wenn wir eine Taste auf der Tastatur drücken, möchten wir dem Sketchmanager mitteilen können , dass er die Skizze erneut rendern soll. Gehen wir also zurück zu unserer Skizze. Schließlich können wir diesen ganzen Codeblock mit Schrägstrich und dann am Ende Stern und Schrägstrich auskommentieren diesen ganzen Codeblock mit Schrägstrich und dann am Ende Stern und Schrägstrich und diese Blöcke einfach als Referenz hier belassen Jetzt werden wir abschließen. Unser Aufruf an Canvas ist eine Skizze mit Sync-Funktion namens Star genau wie wir es in unserem Beispiel getan haben. das an der richtigen Stelle ist, können wir dann den Mager-Sketch und eine Variable speichern , um auf die Converse Sketch zu warten Tatsächlich wollen wir, dass diese Variable außerhalb des Bereichs dieser Funktion sichtbar Also lass es uns hier oben deklarieren. Und wir müssen daran denken, Star anzurufen, damit er sofort weglaufen kann. Jetzt können wir in der Key App, nachdem wir den Wert von Text festgelegt haben, den Manager Dot Render aufrufen. Und wir können sehen, dass es funktioniert, aber ich möchte Großbuchstaben verwenden, also füge ich die beiden Großbuchstaben hinzu Und damit sind wir wieder auf dem richtigen Weg. Damit war der Umweg zu Ende. Es sah ein bisschen lang aus, aber es war ein wichtiges Konzept, das es zu behandeln Wenn Sie einmal mit der Angabe von Fehlergewichten vertraut sind, müssen Sie eigentlich nicht mehr viel Code schreiben, um sie zu verwenden. Am Ende mussten wir nur noch eine Sing-Funktion um die Code-to-Canvas-Skizze wickeln . Es steckt mehr hinter Versprechungen als das, was ich hier behandelt habe. Zum Beispiel, was passiert, wenn ein Versprechen abgelehnt wird , und wie man eine Fehlermeldung abfängt. Ich werde einen Link mit einem Beispiel mit weiteren Details posten , falls Sie mehr darüber lesen möchten. Das war eine kleine Reise, aber jetzt sind wir damit fertig. Sie lernen das leistungsstarke Konzept kennen, das sich bei der Verwendung von JavaScript definitiv als nützlich erweisen wird. In der nächsten Lektion werden wir zu unserer Skizze zurückkehren. 21. Eine Bitmap erstellen: Jetzt werden wir uns mit dem Lesen Farbwerten aus den Pixeln auf unserer Leinwand befassen Wir haben jetzt einen großen Buchstaben genau in der Mitte unserer Skizze, und der Effekt, den wir anstreben, ist, andere Formen in der Form dieses Buchstabens zu zeichnen. Wir können anfangen, darüber nachzudenken, was wir jetzt nur als Positions - und Farbdaten sehen . Das muss nicht einmal auf unserer Skizze stehen. Wir müssen nur wissen, wo wir weiße Pixel haben und wo wir schwarze Pixel haben. Wir können uns unseren Canvas als eine Big-Data-Map oder eine Bitmap vorstellen . Canvas ist eine Bitmap. Wenn wir die Dimension festlegen, gibt es ein Pixelraster. Wir sagen, wir wollen so viele Pixel auf diese Weise und so viele Pixel auf diese Weise. Wenn wir den Pixeln auf unserer Leinwand sehr nahe kommen, sehen wir, dass sie aus unseren Kanälen RGB und A bestehen. Jede dieser Zahlen ist 0—255, was der Farbinformation eines Pixels entspricht Und die Farbe ist hier nicht das einzig Wichtige. Es ist auch wichtig zu wissen, wo sich das Pixel befindet. Es ist die XN Y-Position oder ihre Spalte und Zeile im Raster. Wir wissen bereits ein oder zwei Dinge über Gitter, das wird sich hier als nützlich erweisen Zuallererst müssen Sie separaten Canvas für unseren Brief erstellen, einen kleineren, den wir nur zum Lesen von Daten verwenden werden nur zum Lesen von Daten verwenden Wir können es oben in unserer Datei erstellen. Kostentyp Canvas entspricht dem Document Dot Quit Element, Canvas, und dann benötigen wir auch den Kontext. Der Kontext vom Typ C entspricht also dem Typ Canvas dot Get context. Dann in der SCAT-Funktion, aber vor den Renderfunktionen weil wir das nur einmal machen müssen Wir werden die Rastereigenschaften vom Typ Canvas definieren, und dafür benötigen wir Breite und Höhe Also können wir diese Eigenschaften hierher kopieren und sie hier verfügbar machen. Wir wissen, dass ein Pixel immer ein Quadrat ist, also können wir seine Dimension in einer einzigen Variablen speichern. Kostenzelle müssen wir die Werte für Breite und Höhe nicht trennen, und dann können wir einfach eine Größe für unser Pixel auswählen. Nehmen wir an, es werden 20 sein. Und um dann die Anzahl der Spalten zu definieren, müssen wir das Gegenteil von dem machen was wir in unserem vorherigen Raster getan haben Und sagen wir Mathepunkt Boden, Breite geteilt durch Zelle Das bedeutet, dass wir für alle 20 Pixel in unserer Hauptleinwand ein Pixel in unserer Typ-Leinwand haben werden. Die Breite unserer Skizze beträgt 1080/20. Es gibt uns 54. Dann müssen wir dasselbe für Zeilen tun. Matheboden, Höhe geteilt durch Zellen, taube Zellen wird das Gleiche sein wie beim letzten Mal, nennt mal Seile Und damit können wir die Größe des Typs Canvas festlegen. Geben Sie Canvas ein , wobei die Anzahl der Spalten und Höhen angegeben wird . Es wird die Anzahl der Spalten sein, und Höhe wird die Anzahl der Zeilen sein. Anstatt in den Kontext zu zeichnen, werden wir in den Typkontext zeichnen. Wählen Sie also einfach alle Vorkommen des Kontextes aus und ersetzen Sie es durch den Typ Kontext Wir können diese auskommentierten Zeilen loswerden und sie dann durch Kohlen und Höhen durch Zeilen ersetzen Um zu sehen, was wir hier haben, können wir den Text Canvas mit dem Kontextpunkt in unsere Skizze zeichnen, Bild zeichnen, Canvas eingeben und dann X und Y Null und Null Wir sehen noch nichts, also versuchen wir zu verstehen, was vor sich geht. Eine einfache Möglichkeit, um zu überprüfen, ob mit Type Canvas alles in Ordnung ist , besteht darin, die Hintergrundfarbe auf Schwarz einzustellen. Und die Textfarbe auf Weiß. Jetzt sehen wir dort oben ein kleines schwarzes Quadrat. Aber wo ist unser großer Buchstabe A? Das Problem ist, dass die Schriftgröße jetzt zu groß ist. Wir müssen es basierend auf der Größe unserer neuen Leinwand aktualisieren. Wir könnten es einfach so einstellen , dass es der Breite oder Anzahl der Spalten entspricht , und da ist unser Typ Canvas. Jetzt wollen wir die Pixeldaten daraus lesen. Dafür benötigen wir eine Methode namens get image data. Als Parameter werden X, Breite und Höhe des Bereichs erwartet X, Breite und Höhe des , aus dem wir Daten lesen. Wir können das als Variable mit dem Namen type data speichern und ihr zwei Typen von Kontext-Get Image-Daten zuweisen: Null, Null, Aufrufe und Zeilen. Schauen wir uns an, was interne Typdaten in der Konsole verwenden. Daten vom Typ „Punktprotokoll“ in der Konsole. Es handelt sich um ein Objekt vom Typ Bilddaten haben Breite, Höhe und Daten, und Daten sind ein großes Array mit mehr als 12.000 Elementen Das ist ein Element für jeden Kanal jedes Pixels. GBA, also das Vierkanal-fache der Breite, was dem 54-fachen der Höhe entspricht, was ebenfalls 54 ist, kennen wir unsere Breite und Höhe bereits, sodass wir unsere Typ-Datenvariable so einstellen können, dass sie nur die Dateneigenschaft dieses Objekts Jetzt wollen wir diese Pixelwerte lesen und wissen, wie man Daten aus einem Array liest Wir benötigen eine Viererschleife, denn I ist gleich Null, I ist kleiner als NML, I plus Canvas ist eine Bitmap und eine Bitmap ist ein Grid. Wir wissen bereits, wie man Spalten und Zeilen in einem Raster findet. Also lass uns das noch einmal machen. Convall entspricht zwei Anrufen, die ich geblieben bin. Constru entspricht Mathe Dot Floor, ich dividiere durch Aufrufe. Jetzt möchte ich X und Y verwenden, aber wir verwenden diese hier oben bereits als Variablennamen Also werde ich sie einfach in TX und TY umbenennen . Jetzt sind die Namen X und Y wieder verfügbar. Die Kosten X entsprechen der Zelle in der kalten Zeit. Die Kosten Y entsprechen der Rohzeitzelle. Lassen Sie uns nun für jede dieser Zellen ein kleines Quadrat zeichnen. Kontextpunkt speichern, Kontextpunkt wiederherstellen. Kontextpunkt übersetzt X und Y und der Kontextpunkt fühlt sich richtig an, Null , Null und L. Alles wird schwarz, weil wir 54 mal 54 sind. Schwarze Quadrate auf unserer Skizze. Was wir wollen, ist, die Farben dieser Quadrate auf der Grundlage von Banddaten zu ändern . Wir wollen diese GBA-Werte lesen. Lassen Sie uns eine neue Variable namens R erstellen und sie auf Banddaten setzen Und zwischen den eckigen Klammern soll der Index der erste Kanal des Pixels sein , bei dem wir uns befinden. Wir wissen, dass der Pixelindex der Index unserer Schleife ist. Also der Buchstabe I, wir wissen, dass RGBA vier Kanäle ist, also ich mal vier, und wir wissen, dass Rot der erste Kanal ist, also plus Null, wir müssen zu nichts Null hinzufügen Ich tippe ihn hier nur ein, um zu verdeutlichen, dass wir vom ersten Kanal aus lesen Jetzt die anderen Kanäle zu finden, ist sehr einfach. Duplizieren Sie einfach diese Zeile. Ändern Sie den Variablennamen in G und den Kanalindex in eins. Dann B und zwei, dann A und drei. Wir brauchen den Alpha-Kanal eigentlich nicht, aber wir können ihn hier deklarieren. Jetzt müssen wir nur noch den Stil des Kontext-Punktfeldes ändern und diesmal das Template-Literal verwenden , um eine einzelne Zeichenfolge Bektische RGB-Klammern öffnen und schließen, dann Dollar-Sinusklammern, R-Dollar-Sinusklammern, G - und Dollar-Sinusklammern, B, und da Pixelierte Version unseres großen Typs. Dies unterscheidet sich davon, einfach etwas Kleines zu zeichnen und es dann zu vergrößern, um es pixelig zu sehen , denn jetzt können wir jede beliebige Form zeichnen Schauen wir uns zum Beispiel an, wie das mit Kreisen statt mit Quadraten aussieht Kontext-Punkt, Anfangspfad, Kontaktpunkt, Bogen 00, Nullpunkt Pi mal zwei, und Kontaktpunktfüllung , das ist nicht ganz richtig. Die Funkgeräte müssen die Hälfte der Zelle ausmachen. Nun, das ist fast richtig. Wir können sehen, dass hier rechts und unten im Raster etwas auftaucht . Und das liegt daran, dass der Kreis von der Mitte der Zelle aus gezogen wird, aber wir übersetzen nur in die obere linke Ecke jeder Zelle Also müssen wir eine weitere Übersetzung hinzufügen, um mal 0,5 zu sehen und mal 0,5 zu sehen Nun das richtig ausrichten. Wir sind auf dem Weg dorthin. Die wahre Wendung kommt als nächstes. 22. Mehr über Glyphen erfahren: A In dieser Liste werden wir unsere Skizze fertigstellen Anstatt Quadrate oder Kreise zu zeichnen, werden wir für jedes Pixel unseres Typs Leinwand andere Glyphen für jedes Pixel unseres Typs Das wird also ein bisschen Meta sein. Wir werden kleine Glyphen zeichnen, um eine große Glyphe zu bilden. Statt Bogen wollen wir Kontexte Punktfeld Text, Text 00. Dieser kleine schwarze Buchstabe ist nicht das, was wir wollen. Also lasst uns den Hintergrund auf Schwarz setzen. Stellen Sie vor der Schleife den Stil des Kontextpunkts auf Schwarz und zeichnen Sie ein großes Rechteck, füllen Sie die gesamte Leinwand aus. Wenn Sie trotzdem den kleinen Text Canvas dort oben sehen möchten , können Sie ihn einfach nach dem Füllen Wreck verschieben Nun, wir könnten hier vielleicht größere Glyphen haben. Lassen Sie uns die Schriftgröße auf die doppelte Größe der Zelle ändern. Schriftart für den Kontextpunkt. Dollarzeichen. Verkaufe Zeit zwei. PX und Schriftfamilie. Ich möchte nicht ständig dieselbe Glyphe zeichnen. Ich möchte eine andere Glyphe auf der Helligkeit des Pixels basiert Wir könnten zum Beispiel einen Punkt für Dunkelgrau und einen Strich für Mittelgrau zeichnen einen Strich für Mittelgrau Lassen Sie uns also eine neue Variable namens glyph erstellen und sie auf eine Funktion namens get glyph setzen , die wir als Nächstes erstellen werden , die wir als Nächstes erstellen Und dann werden wir hier anstelle von Texten Glyph wir hier anstelle von Texten Glyph Wir müssen die Helligkeit des Pixels weitergeben, um Glip zu erhalten , und wir benötigen nicht alle Kanäle, da Sie einen weißen Buchstaben zeichnen und zwei Jeder der Farbkanäle, die wir verwenden werden. Ich werde einfach den roten Kanal benutzen. Und tatsächlich können wir jetzt Weiß verwenden, um diese Glyphen zu zeichnen. Wir wollen das Dunkelgrau nicht mehr. Sie können den Kontextpunktfeldstil einfach auf Weiß setzen. Schreiben wir nun die Funktion get glyph. Sobald wir Glyph als Parameter haben, haben wir den Wert, den ich einfach V nennen werde, und wir wissen, dass V eine Zahl von 0-255 sein wird , weil das der Bereich des roten Kanals ist Je nachdem, wie hell das Pixel ist, möchte ich verschiedene Glyphen zurückgeben Also werde ich sagen, wenn V kleiner als 50 ist, gebe eine leere Zeichenfolge zurück I V ist kleiner als 100, gib einen Punkt zurück In diesem Fall müssen wir weder verwenden noch sehen, denn sobald eine Bedingung erfüllt ist, wir bereits einen Wert zurück und überprüfen nicht einmal die anderen Bedingungen. Also fangen wir einen Wert von 0-49 ab. Und das fangen wir 50-99. Das duplizieren Wenn V kleiner als 150 ist, gib einen Bindestrich zurück. Und wenn V kleiner als 200 ist, gib ein Pluszeichen zurück. Und wenn keine der obigen Bedingungen erfüllt ist, bedeutet dies, dass das Pixel sehr hell ist, sodass wir unsere ursprüngliche Textvariable zurückgeben können. Wir können die Punkte und Striche hier sehen, aber das ist ein bisschen seltsam Ich denke, wir müssen den Ursprung und die Ausrichtung erneut anpassen. Wir werden von der Mitte der Zelle aus gezeichnet, aber Sie erinnern sich vielleicht, dass der Text von unten gezeichnet und nach links ausgerichtet ist . Sie müssen ihn wieder in der Mitte ausrichten. Dieses Mal benötigen wir nicht so viel Genauigkeit, wenn dies ausreicht, um eine textbasierte Zeilenmitte zu verwenden. Textpunkt ausrichten. Das sieht langsam interessant aus, aber dieselbe Glyphe, die die ganze Zeit wiederholt wird, ist ein bisschen langweilig Der Standardwert hier könnte eine zufällige Glyphe sein. Das können wir in zwei Schritten machen. Zuerst schreiben wir eine Zeichenfolge mit den Glyphen, an denen wir gearbeitet haben. Kostenglyphen, Gleichheitszeichen für Unterstriche, Leerzeichen und Schrägstrich Leerzeichen und Dann konvertieren wir dies in ein Array, indem wir eine Methode aus einer Zeichenfolge Dies ist nützlich, wenn wir jedes Mal, wenn wir ein Leerzeichen oder ein Komma finden, etwas Text ausgeben möchten jedes Mal, wenn wir ein Leerzeichen oder ein Komma finden, etwas Text In unserem Fall wollen wir zum Beispiel jedes einzelne Zeichen ausspucken Unser Delmeter wird also eine leere Zeichenfolge sein und dann einen zufälligen Glip aus diesem Array auswählen Wir können wieder unseren Freund Random from Canvas Sketch, ETL verwenden Canvas Sketch, ETL Es hat eine Funktion namens pick, die ein zufälliges Element aus einem Array darstellt Lassen Sie uns also noch einmal ein zufälliges Objekt aus der Canvas-Skizze importieren , etLH Geben Sie dann eine zufällige Punktspitze zurück und übergeben Sie die Array-Glyphen Okay, zufällige Glyphen, aber wir können es auch zufälliger machen, indem wir eine andere Schriftgröße verwenden Ich möchte den Glyphen eine zehnprozentige Chance geben , dass sie viel größer sind Duplizieren Sie diese Zeile hier und fügen Sie die Bedingung vorne Wenn Math Dot Random kleiner als 0,1 ist, legen Sie die Schriftgröße auf das Sechsfache der Größe der Zelle fest. Wir können aufhören, die kleine Zeichenfläche hier oben zu zeichnen, und die Schrift vielleicht auch etwas vergrößern. Es fühlt sich also eher nach Skizze an, sagen wir mal 1.2 aufrufen und dann mit allem experimentieren. Probiere verschiedene Glyphen aus. Sie können hier sogar einige Wörter zurückgeben. Es liegt an Ihnen, von nun an mit anderen Varianten zu experimentieren . Bis hier beenden wir unseren ersten Teil der Lektionen. Jetzt werden wir uns auf den Weg machen, um fortgeschrittenere Dinge zu entdecken. 23. Rechteck zeichnen: Wir beginnen jetzt mit unserem fortgeschrittenen Teil des Kurses. In diesem Abschnitt werden wir viele verschiedene Techniken erlernen , die weiter fortgeschritten sind. Am Ende dieser Liste wirst du etwas haben, das so aussieht Wenn Sie den Kurs mit einem Online-Editor verfolgen, können Sie zu der Vorlage gehen, die wir in der vorherigen Lektion gemeinsam erstellt haben , und eine Kopie davon für diese neue Skizze erstellen Und geben Sie stattdessen diese ab. Wenn Sie den Kurs mit einem Offline-Setup verfolgen, gehen Sie zum Terminal und suchen Sie den Ordner, in dem Sie Ihre Skizzen speichern möchten Meins ist Document Slash Java Visual Slash Sketches Sobald Sie im richtigen Ordner sind, geben Sie Canvas sketch, sketch skew, Hier führen wir den Canvas-Sketch-Befehl aus und übergeben eine JavaScript-Datei namens Sketch Skew, die Also verwenden wir die neuen Parameter , um dem Canvas eine Skizze mitzuteilen. Wir möchten, dass diese Datei erstellt wird. Und wir können der Einfachheit halber auch Dd Open verwenden. Es öffnet sich ein neuer Tab und der Browser mit einer neu erstellten Skizze. Wenn wir nun Sketch QGs im Editor öffnen und das Fenster so teilen, haben wir eine sehr ähnliche Ansicht sowohl für das Online- als auch für das Offline-Setup Das Erste, was ich hier gerne mache, ist, wie gewohnt die Abmessung der Skizze 1080 mal 1080 zu ändern wie gewohnt die Abmessung der Skizze 1080 mal 1080 Ich arbeite gerne mit dieser Dimension. Es ist praktisch, auf Instagram zu posten und ich habe mir gerade angewöhnt, das zu tun. Als Nächstes zeichnen wir ein Rechteck in der Mitte der Leinwand. Lassen Sie uns vier Variablen für das Rechteck erstellen: X, Y, W und H. Beachten Sie dass ich sie innerhalb der Sketch-Funktion, aber außerhalb der Render-Funktion erstelle aber außerhalb der Render-Funktion da sie nur einmal deklariert werden müssen. Nicht jedes Mal, wenn die Skizze gerendert wird. Dann können wir in der Renderfunktion ihre Werte festlegen. Ich werde die hier übergebenen Parameter für Breite und Höhe verwenden und X auf die Hälfte der Breite der Leinwand und Y auf die Hälfte der Höhe setzen. Also W auf 60% der Breite und H zwei auf 10% der Höhe. Um nun das Rechteck zu zeichnen, legen wir zunächst entweder eine Feldfarbe oder eine Strichfarbe fest. Ich möchte nur einen Umriss zeichnen. Also werde ich eine Strichfarbe mithilfe einer Eigenschaft eines Kontextes festlegen , die als Strichstil bezeichnet wird. Der Punktstrichstil entspricht also dem Blau. Und um dann das Rechteck tatsächlich zu zeichnen, benötigen wir eine Funktion namens strokRpt Es benötigt vier Parameter XY, Breite und Höhe, genau das, was wir hier haben Also Kontext-Punktstrich, Reaktion X, Y, W und dann das Feuer retten Dadurch wird ein Rechteck gezeichnet, das von der Mitte der Leinwand ausgeht und bis zu einer Stelle außerhalb der Leinwand erstreckt Das ist nicht genau das, was ich mir vorgestellt habe, also muss ich einige Anpassungen vornehmen. Ich möchte das Rechteck von seiner Mitte aus zeichnen, nicht von oben links. Also möchte ich dieses X und Y hier durch minus die Hälfte der Breite und minus die Hälfte der Höhe ersetzen . Okay, jetzt befindet sich der Ankerpunkt in der Mitte des Rechtecks, aber wir verwenden unser X und Y nicht mehr. Wir könnten sie direkt zur Stroke-Wrect-Funktion hinzufügen, aber es gibt einen besseren Weg, dies mithilfe einer Kontexttransformation zu tun Wir können den gesamten Kontext in X und Y übersetzen und dann von hier aus mit dem Ertrinken beginnen Ich wechsle hier ständig die Tabs, um dir die API-Referenz zu zeigen, aber ich werde das nicht jedes Mal tun , wenn wir etwas Neues sehen Das Beste ist für mich, die API einfach weiter zu verwenden. Und wenn Sie weitere Informationen zu einer dieser Methoden benötigen, empfehle ich Ihnen, diese Seite geöffnet zu lassen und sich die Dinge in Ruhe anzusehen. Nun zurück zur Übersetzung im Kontext. Wir verwenden Context Dot Translate X und Y. Wann immer wir den Kontext transformieren, empfiehlt es sich, ihn in seinen vorherigen Zustand zurückzuversetzen , damit wir keine gezeichneten Befehle verderben , die nach der Transformation kommen könnten Dazu rufen wir zunächst Context Dot save auf, um den aktuellen Status zu speichern Und wenn wir fertig sind, rufen wir Context Dot Restore auf. Wie gesagt, das ist eine gute Praxis. Wir sollten uns daran gewöhnen, Transformationen in Blöcken wie diesen durchzuführen. Das war einfach. Jetzt zeichnen wir dasselbe Rechteck, aber auf eine andere Art und Weise. Wir werden die Stroke-Wreck-Methode öffnen und die Form Punkt für Punkt zeichnen Wir beginnen mit dem Startpfad des Kontextes bewegen uns dann mit einer Bewegung von zwei minus der Hälfte der Breite und minus der Hälfte der Höhe zur linken oberen Ecke des Rechtecks zwei minus der Hälfte der Breite und minus der Hälfte der Höhe zur linken oberen Ecke des Stellen Sie sich vor, wir bewegen einen virtuellen Stift an diese Position ziehen dann von dort aus eine Linie bis zur nächsten Ecke des Rechtecks als positive Hälfte der Breite und immer noch negative Hälfte der Höhe Wir sind noch nicht fertig, aber wenn Sie sehen möchten, wie das aussieht, können wir Context Dot Stroke nennen. Jetzt zurück zum Ertrinken Wir brauchen eine Linie von der Stelle, an der wir den virtuellen Stift verlassen haben, bis zur Hälfte von W und zur Hälfte von und eine weitere Linie bis minus die Hälfte von W und der Hälfte von, um das Rechteck zu schließen Wir können den Pfad zum Schließen des Kontextes aufrufen und schon haben wir wieder unser Rechteck Der Unterschied besteht darin, dass wir sie diesmal Punkt für Punkt zeichnen, was bedeutet, dass wir diesen Punkt an eine beliebige Stelle verschieben können. Lassen Sie uns unseren Code noch ein bisschen optimieren. Vielleicht ist es einfacher , über die Koordinate des Rechtecks nachzudenken , wenn man von seiner oberen linken Position und seiner vollen Breite und Höhe ausgeht , als von all diesen halben Dimensionen hier Wir können einen anderen Kontext verwenden, um auf minus die Hälfte von W und minus die Hälfte von H zu übersetzen um auf minus die Hälfte von W und und dann von Null, Null auf Null, dann H und auf Null H zu zeichnen . Die visuelle Ausgabe hat sich nicht geändert, aber der Code sieht jetzt natürlicher aus. Das war nur ein Rechteck , das in der nächsten Lektion häufiger vorkommt 24. Zeichnen eines schrägen Rechtecks: Unser Ziel ist es, ein Scud-Rechteck zu zeichnen. Wir müssen die Ecke um einen Winkel bewegen, und dafür benötigen wir ein bisschen Trigonometrie Wir werden unser Rechteck für einen Moment verstecken und diesen Teil des Codes auskommentieren. Um diesen nächsten Teil zu erklären, möchte ich nur eine einzige Linie zeichnen, mit dem Startpfad für den Kontext beginnt, dann den Kontext bis zum Anfang der Zeile bei 00 bewegt und dann die Linie, sagen wir 200 und Null Setzen wir 00 wieder in die Mitte der Leinwand und kommentieren den zweiten Kontext , den wir übersetzen. Ich möchte, dass du dir diese Linie innerhalb des Kreises vorstellst. Der Mittelpunkt des Kreises liegt bei 00. Und der Radius des Kreises ist 200. Wenn der Kreis eine Uhr wäre, würde die Linie auf 3:00 Uhr Was müssten wir tun, um diese Linie auf 4:00 Uhr zu bringen? Wo wäre das Ende in den Positionen X und Y? Wir haben bereits den Radius des Kreises. Was wir brauchen, ist ein Winkel, und wir können davon ausgehen, dass 3:00 bei null Grad liegt, vier bei 35, bei 66 Uhr bei 90 Grad und so weiter Wählen wir also 30 Grad für 4:00 Uhr. Um das Querciin zu finden, die Koordinaten X und Y mit dem Radius und dem Winkel, lautet die Formel wie folgt. X ist der Kosinus von Winkel mal Radius, also mathematischer Punktkosinus Winkel mal Radius, und Y ist der Sinus von Wir können eine Variable für diese Wörter deklarieren, wir tippen einfach. Lass uns das hier oben zusammen mit den anderen Variablen machen. Und dann setze den Radius auf 200 und den Winkel auf 30. Jetzt ist 30 der Wert in Grad, aber der mathematische Punktkosinus erwartet einen Wert in Radianz Also müssen wir das zuerst konvertieren. Wir könnten eine Funktion schreiben, um zwischen Grad und Strahlkraft umzurechnen, aber das ist eine sehr verbreitete Operation, und es gibt Bibliotheken, die wir dafür verwenden könnten Die, die ich hier vorschlagen werde , ist eine Begleitbibliothek für Canvas Sketch namens Canvas Sketch UTL Sie hat eine Reihe von Hilfsfunktionen für Mathematik, zufällige Farben und Geometrie Wir wissen bereits im ersten Abschnitt des Kurses , wie das geht. Wir schauen uns das gerade noch einmal an. Jetzt werden wir im Kurs vorerst einige verwenden , das, was uns interessiert, Grad-zu-Rot, das Teil des mathematischen Objekts ist Skizze auf Leinwand TL Mathe. Jetzt können wir unseren Winkel in Strahlkraft umrechnen, indem wir Matt Dec to Red verwenden Jetzt müssen wir nur noch die X- und Y-Werte verwenden , die wir hier berechnet haben Und unsere Linie zeigt jetzt auf 4:00 Uhr. Der tatsächliche Wert von X und Y sind die Zahlen 0-200. Es wäre wenig sinnvoll, zu versuchen, diese Koordinate ohne die Verwendung von Winkeln zu finden Es ist einfacher, sich diese horizontalen Linien als Null Grad und diese Diagonale als 45 Grad vorzustellen. Das sind 90 Grad und so weiter. Jetzt, wo wir das wissen, gehen wir zurück zu unserem Rechteck, anstatt diese X- und Y-Variablen zu verwenden. Lassen Sie uns das aufgeräumt halten und neue Variablen namens Rx und AirY erstellen neue Variablen namens Rx und Und wir brauchen den Radius nicht wirklich , weil wir W verwenden werden, was der breiteste Teil des Rechtecks ist Der Winkel kann so bleiben, wie er ist, und dann ist x der Kosinus des Winkels mal W und RY der Sinus des Winkels mal W. Diese Linie kann verlaufen und wir können sie über den Code verschieben Wir haben es vorhin kommentiert. Diese Kontext-Übersetzung wird jetzt zu R x mal -0,5 und zwischen Klammern RY plus H Zug zwei kann bei 00 bleiben. Und die erste Zeile geht jetzt zu RX und RY, die zweite zu RX und RY plus und die dritte kann bei Null und H bleiben. Jetzt speichern wir das und es gibt vier Scud-Rechtecke Wir können es auch mit anderen Winkeln versuchen. Das Letzte, was wir hier tun müssen, ist, das, was wir gerade gemacht haben, in eine Funktion umzuwandeln. Ich werde eine am Ende der Datei direkt nach der Sketch-Funktion erstellen Ende der Datei direkt nach der und sie drawSkdrt nennen Für den Parameter können wir sie entweder einzeln übergeben oder einen einzelnen Parameter als Objekt mit mehreren Eigenschaften übergeben. Ich werde mich darauf einlassen. Geschweifte Klammern und Eigenschaften sind also Kontext, W H und Grad. Der Kontext ist es, wo wir hingezogen werden. W und H sind die Breite und Höhe des Rechtecks verringern den Winkel von Sco und drücken ihn in Grad aus, nicht in Strahlkraft Wir können ihnen Standardwerte wie 600 für die Breite, 200 für die Höhe und -45 für den Jetzt können wir einfach diesen ganzen Codeabschnitt innerhalb der Funktion verschieben Codeabschnitt innerhalb der Funktion Erwarte diese Zeile mit dem Strichstil, der hier oben bleiben kann Da dieser Block jetzt außerhalb des Geltungsbereichs der Sketch-Funktion liegt , müssen die Variablen erneut deklariert werden Diesmal können wir const verwenden , weil sie sich innerhalb der Funktion nicht ändern Und da Sie den Kontext übersetzen, denken Sie daran, dass ich gesagt habe, dass es eine gute Praxis ist, den Zustand des Kontextes nach der Transformation immer wiederherzustellen Also müssen wir diesen Block mit dem Context Dot Safe und dem Context Dot Restorer umschließen Context Dot Safe und dem Context Dot Restorer Mal sehen, ob das funktioniert und rufen Drous Code rect auf, übergeben den Kontext als Parameter und belassen die anderen bei ihrem Standardwert Und dann den Context Dot Stroke aufrufen. Da ist er wieder. In dieser Hörprobe haben wir gelernt, wie man eine externe Bibliothek importiert und installiert, wie man kartesische Koordinaten anhand eines Winkels und Radius findet und wie man ein Scud-Rechteck zeichnet In der nächsten Liste werden wir einen Hub zeichnen. 25. So erstellst du Distribution: Nun, da wir eine Funktion zum Zeichnen eines Trupp-Rechtecks haben, wollen wir ein paar davon zeichnen. Dieser Teil ist einfach. Alles was wir brauchen ist eine For-Schleife. Wir können die Anzahl der gewünschten Formen in einer Variablen speichern. Nennen Sie es NAM und setzen Sie es auf 20. Dann wickeln wir vier Schlaufen um die Kohle, um ein Rechteck zu zeichnen Denn sei I gleich Null, I ist kleiner als Zahl I plus plus Das Ergebnis sind 20 übereinander gezeichnete Rechtecke. Wir können sie an zufälliger Position auf der Leinwand verteilen zufälliger Position auf der Leinwand Und dafür können wir ein anderes Modul von Canvas Sketch Out verwenden . Wir haben es bereits formatiert, also müssen wir es nur importieren, Host Random entspricht Canvas Sketch Utl random In der Dokumentation finden wir wieder eine Reihe praktischer Funktionen, finden wir wieder eine Reihe praktischer Funktionen genau wie wir es mit dem Mathematikmodul getan haben Die, an der wir interessiert sind, ist der zufällige Punktbereich. Wir übergeben einen Mindest- und einen Höchstwert und erhalten eine Zufallszahl zwischen ihnen zurück. Wir können das verwenden, um das X und das Y für jedes Rechteck zu ändern. X kann eine beliebige Zahl zwischen Null und gewichtet sein. Und warum? Eine Zahl zwischen Null und Höhe? Warum nicht dasselbe für die Abmessung des Rechtecks tun? W kann 200-600 und H 40-200 sein. Der Winkel ist für alle gleich, also können wir ihn hier oben in einer Variablen speichern und diese Werte nun als Parameter übergeben Das wird immer interessanter, aber es gibt ein Problem mit diesem Ansatz. Diese zufälligen Aufrufe hier in der Renderfunktion bedeuten , dass die Rechtecke jedes Mal, wenn die Skizze gerendert wird , anders aussehen Das ist eigentlich eine gute Sache. Wir wollen dieses Element der Zufälligkeit, aber wir wollen auch die Kontrolle darüber haben Nehmen wir an, wir drücken Control S oder Command S , um diesen Frame zu speichern, bevor wir das tun Wählen wir ein Rechteck, das wir später erkennen können. Ich würde sagen, dieser. Jetzt drücke ich Control S und werde den Ordner herunterladen und den Ausgaberahmen überprüfen. Wir können sehen, dass unser Referenzrechteck nicht hier ist. Das Bild kam anders heraus als was wir auf dem Bildschirm sahen, und das liegt daran, dass die Renderfunktion während der Aufnahme des Frames aufgerufen wurde und am Ende völlig unterschiedliche Zufallszahlen verwendet wurden. Das Gleiche wäre der Fall, wenn wir die Skizze animieren würden, indem wir der Umgebung animierte Originalgetreue hinzufügen Jetzt läuft die Renderfunktion auf jedem Bild , was zu diesem Verbindungsproblem führt , das wir hier sehen. Es gibt zwei Möglichkeiten, dieses Problem zu lösen Lassen Sie uns mit einer davon beginnen und die andere später ansprechen. Wir können die Eigenschaften des Rechtecks außerhalb der Renderfunktion speichern . Wir werden ein neues Array namens rects erstellen und es mit Objekten füllen , die die Daten unseres Rechtecks darstellen werden die Daten unseres Rechtecks darstellen X, Y, W und H sind nur Daten. Wir können den Anfang unserer Schleife, in der wir den Wert für diese Variablen festlegen, kopieren und ihn hier aufrufen. Dann gehen wir in das Reg-Array, ein neues Objekt, das diese Eigenschaften enthält. Drücken Sie also den roten Punkt, das steht in den geschwungenen Klammern, X, Y, W und H. Wir sind noch nicht fertig Aber wenn wir das ausführen, erhalten wir eine Fehlermeldung in der Konsole, die besagt, dass die Breite nicht definiert ist Wir haben hier in der Sketch-Funktion Zugriff auf dieselben Eigenschaften der Render-Funktion. Wir müssen sie nur deklarieren. Kopieren Sie also diesen Parameter und fügen Sie ihn hier ein. Jetzt müssen wir unser Rex-Array verwenden. Wir brauchen das hier nicht mehr für die Schleife, sondern wir haben eine Reihe von Objekten, die wir für jede Schleife verwenden können, was eine Funktion von Array ist, also einen roten Punkt für jede Schleife. Und der erste Parameter ist das Objekt, über das wir iterieren, wir können es rect nennen Jetzt könnten wir diese Werte durch rect X oder rect dot Y usw. ersetzen . Es gibt eine Art und Weise, in der wir nichts von dem ändern müssen, was wir zuvor hatten Das heißt, direktes Objekt zu zerstören. Wir machen das mit konstanten offenen Klammern, alle Eigenschaften, die wir zerstören wollen, und schließen dann geschweifte Klammern. Das Gleiche gilt für Rect. Der Rest kann so bleiben wie er ist, und unser Der Unterschied besteht jetzt darin , dass die zufälligen Aufrufe innerhalb der Sketch-Funktion nur einmal vorkommen. Somit bleiben alle Eigenschaften der Rechtecke bei jedem Aufruf der Render-Funktion gleich Wir können das testen, indem wir animate auf true setzen. Seine Skizze ist jetzt animiert, aber nichts bewegt sich, weil die Positionen und Größen für jedes Bild gleich bleiben Das ist es, was wir wollen, denn obwohl die Komposition nun zufällig ist, können wir, wenn wir auf eine stoßen, die uns gefällt, sie mit Strg oder Befehl S speichern, und die Ausgabe ist dieselbe Wie wir hier auf dem Bildschirm sehen. Jetzt wissen wir also, wie man Zufallswerte verwendet, um die Zusammensetzung zu ändern, wenn wir die Seite aktualisieren, und wir wissen auch, wo im Code sie verwendet werden sollen. In der nächsten Hörprobe werden wir einige Farben hinzufügen. 26. Lerne das Hinzufügen von Farben: Wir sind bereits dabei, Position und Größe nach dem Zufallsprinzip zu ordnen, und wir können auch zufällige Farben verwenden Wir werden sehen, wie das auf strukturierte Weise gemacht werden kann. Wir können damit beginnen, dem zerstörten Objekt Farbeigenschaften hinzuzufügen zerstörten Objekt Farbeigenschaften Ich deklariere zwei neue Variablen namens fill und stroke. Im Moment können wir das Feld auf Blau und den Strich auf Schwarz setzen. Dann strukturieren wir diese Eigenschaften und setzen den Konturstil Context Dot auf Kontur und Duplizieren der Linie, ändern ihn in den Füllstil und stellen ihn auf Füllung ein. Nach dem Aufruf von Context Dot Stroke nennen wir dann Context Dot Fill. Und jetzt haben wir ein paar blaue Trupp-Rechtecke. Wir ordnen Positionen und Größen nach dem Zufallsprinzip an. Warum ordnen wir also nicht auch die Farben nach dem Zufallsprinzip an? Die Eigenschaft des Feldstils außer benannten Farbe wie der, die wir jetzt verwenden Dies kann aber auch in Hex-Form sein. Kann auch RB-fest sein, z. B. RGB 002 55 oder das RGBA-Präfix wobei der letzte Wert die Opazität 0-1 ist Diese Zahlen lassen sich leichter nach dem Zufallsprinzip sortieren als Hexadezimalzahlen oder Namen. Bleiben wir also bei diesem Formular. Zuerst müssen wir die Zeichenfolge von einzelnen Codes in Beptis ändern , damit wir darin eine Variable verwenden können Jetzt können wir sagen, wir wollen, dass ein blauer GBA-Kanal eine Zufallszahl von 0 bis Der natürliche nächste Schritt besteht darin, auch den roten und den grünen Kanal nach dem Zufallsprinzip zu ordnen Also lass uns das machen. Wir können denselben Ausdruck kopieren und zweimal einfügen, wobei wir darauf achten müssen, dass das Koma dazwischen bleibt. Jetzt sind Farben ein subjektives Thema. Das Ergebnis mag Ihnen gefallen, aber meiner Meinung nach sieht es nicht gut aus. Ich glaube nicht, dass reiner Zufall funktioniert, wenn es um Farben geht Hier gibt es 16 Millionen mögliche Werte, und das ist zu viel Auswahl Es ist besser, diese Optionen auf eine Handvoll Farben zu reduzieren , die uns gefallen und von denen wir glauben, dass sie gut zusammenpassen. Es gibt ein paar berühmte Farbpads, die wir verwenden können, wie Riso und Colors Dies ist eine Liste der beliebtesten Farben für Rizo-Grafikdrucker Die Liste, die wir hier sehen, ist auch in JSofma verfügbar , was perfekt für uns ist Es ist als Bibliothek namens Rizo Colors verpackt und wir können es mit MPM installieren Genau wie bei anderen Bibliotheken gilt auch hier: Wenn Sie ein Online-Editor sind, gehen Sie zum Abhängigkeitsfeld und geben Sie Rizo Wenn Sie das Terminal verwenden, drücken Sie Strg C, um den Vorgang zu beenden, und geben Sie PMI Rizo Drücken Sie dann die Pfeiltaste nach oben, um unsere Skizze erneut auszuführen. Jetzt können wir Limonadenfarben aus Limonadenfarben importieren Um eine zufällige Farbe aus dieser Liste auszuwählen, können wir eine weitere Funktion aus dem Zufallsmodell namens Pick verwenden dem Zufallsmodell namens Sie wählt einen zufälligen Wert aus einem bestimmten Array aus. Füllung entspricht also einem zufälligen Punkt P, also Farben, und den gleichen vier Strichen. Der Rückgabewert ist ein Objekt Wenn wir es also als Feldstil oder Strichstil verwenden wollen , müssen wir das angeben Wir wollen die Hex-Eigenschaft. Sieht das jetzt besser aus? Meiner Meinung nach noch nicht. Wir haben immer noch zu viele Optionen, zu viele Farben prallen aufeinander Wir brauchen eine noch kleinere Untergruppe von Farben. Ich denke, wir wären mit nur drei einverstanden. Also werde ich ein weiteres Array namens Wrecked Colors erstellen und es mit drei zufälligen Riso-Farben füllen es mit drei zufälligen Riso-Farben Anstatt den Feldstil so einzustellen, dass zufällig aus dem gesamten Riso-Farbset ausgewählt wird, setze ich es dann auf Auswahl aus zerstörten Farben. Okay, jetzt denke ich, das sieht langsam gut aus. Wir können den Strich viel dicker machen, damit wir ihn mit der Kontext-Punktlinie richtig sehen können . Entspricht zehn, wir können auch die Hintergrundfarbe ändern. Lassen Sie uns eine neue Variable namens BAG-Farbe erstellen und sie wieder auf den zufälligen Punkt p setzen, wodurch Punkt X neu eingefärbt wird. Und hier verwenden wir statt eines Feldformats Weiß verwenden wir Nun, das ist nicht großartig. Vielleicht sieht es besser aus, wenn wir die Option für die Hintergrundfarbe öffnen und aus dem gesamten Ergebnisfarbsatz auswählen . Das ist besser. Lass uns jetzt ein paar Schatten zeichnen. Wir können eine Eigenschaft des Kontextes zu D verwenden , die als Schattenfarbe bezeichnet wird. Bevor wir fill und stroke aufrufen, legen wir die Schattenfarbe des Kontext-Punkts fest, und im Moment setze ich sie einfach auf Schwarz. Dann den Kontext-Punktschatten von Satz X , den ich auf minus zehn setzen werde , und den Kontext-Punktschatten von Satz Y, der 20 sein wird. Seitdem haben wir Doppelschatten, und das liegt daran, dass sie sowohl für die Füllung als auch für die Kontur gezeichnet werden . Lassen Sie uns also die Schattenfarbe nach der Füllung und vor der Kontur wieder auf Null setzen Das ist ein interessanter Effekt. Wir können die Schatten vielleicht mit einer geringeren Deckkraft etwas weicher machen und LGB A 0.0 0.0 und 0.5 verwenden LGB A 0.0 0.0 Das ist okay. Aber anstatt das gleiche Grau für alle Schatten zu verwenden, möchte ich, dass sie eine etwas dunklere Version der Feldfarbe sind. Mit anderen Worten, ich möchte die Feldfarbe nehmen und ihre Helligkeit oder Leuchtkraft reduzieren. Der beste Weg, das zu tun, besteht darin, die Farbe von LGB in einen anderen Farbraum namens HSL umzuwandeln , was t für Sättigung und Helligkeit steht Diejenigen von Ihnen, die Photoshop oder eine andere Bildbearbeitungssoftware verwenden , sind wahrscheinlich bereits damit vertraut Die Operation zur Konvertierung zwischen RGB und HSL ist nicht die einfachste Aber zum Glück für uns gibt es ein Modell Oma Sketch Rooter, das wir dafür verwenden können Die Methode, die wir jetzt wollen, ist Offset-HSL. Denken Sie daran, dass das COVA-Skizzierwerkzeug bereits vorhanden ist . Wir müssen also nur Farbe angeben, wobei pro Kc der Schrägstrichfarbe des CVA-Skizzenwerkzeugs entspricht CVA-Skizzenwerkzeugs Jetzt können wir eine neue Variable namens Shadow Color deklarieren. Und stellen Sie es auf Color Dot Offset HSL ein. Der erste Parameter ist die Eingabefarbe, die Herbst sein wird Der zweite Wert gibt an, um wie viel wir die Eigenschaft U ausgleichen wollen , die dann Null sein wird, dann die Sättigung der Menge, die ebenfalls Null ist. Und schließlich die Lichteigenschaft , die wir wollen. Wir wollen eine dunklere Version von Fill. Das wird also -20 sein. Um nun die Schattenfarbe zu verwenden, müssen wir den Wert wieder in eine Stilstärke mit einem Farbpunktstil umwandeln , und die Eingabe kann eine beliebige Eigenschaft des resultierenden Farbobjekts sein . Ich werde Shadow Color Dot RGBA verwenden. Wir haben dabei den Alpha-Wert verloren, aber wir können ihn leicht wiederherstellen, indem wir das letzte Element des RGBA-Arrays bearbeiten das letzte Element des RGBA-Arrays und ihn auf 0,5 zurücksetzen Ich überlasse es Ihnen, zu entscheiden, ob Sie Schatten wie diesen oder die einfache Version von 50% Schwarz bevorzugen wie diesen oder die einfache Version von 50% Schwarz Mein Punkt hier war , Ihnen zu zeigen, wie Sie den Farbwert mit der Farb-UTL manipulieren Es ist noch einer für unseren Allzweckgürtel. Ein interessanter Effekt, den ich mit der Skizze ins Spiel gebracht habe, war, einen weiteren Umriss zu zeichnen, einen dünneren, über die bestehende Form. Setzen Sie also die Kontextlinie auf 22, Strichstil auf Schwarz und rufen Sie Stroke erneut auf. Da Sie über Farben sprechen, gibt es ein Konzept weniger, das ich hier vorstellen möchte, und das ist der geplante Modus. In der Canvas-API werden sie als globale Verbundoperation bezeichnet. Der Standardwert ist eine Quelle über, was bedeutet, dass der nächste gezeichnete Befehl oder die Quelle über dem liegt, was bereits im Ziel vorhanden ist. Mit anderen Worten: Was auch immer zuerst abgehoben wird, ist unten, und was danach abgehoben wird, geht nach oben. Einige der möglichen Operationen sind vielleicht denjenigen von Ihnen bekannt, die Bildbearbeitungssoftware wie Overlay verwenden . Verwenden wir es in unserer Skizze. An einer beliebigen Stelle, bevor wir fill aufrufen, setzen wir die globale Verbundoperation mit dem Kontextpunkt auf Overlay Der Umriss der Szene scheint verschwunden zu sein. Bevor wir ihn zeichnen, müssen wir die zusammengesetzte Operation also auf den Quelltext zurücksetzen. Das sieht okay aus, aber ich denke, es würde besser aussehen, wenn wir ein Rechteck mit Überlagerung und andere nur mit einer Volltonfarbe hätten ein Rechteck mit Überlagerung und andere nur mit einer Überlagerung und andere nur mit Wir können also eine neue Eigenschaft für unseren Wrecked namens blend erstellen und ihr einen Wert geben , der davon abhängt, dass eine Zufallszahl größer als 0,5 ist . Ist dies der Fall, wird Overlay oder Source Over zurückgegeben Wir fügen es dem Objekt mit Strukturen innerhalb der Render-Funktion hinzu, und hier verwenden wir Blend statt Overlay Erhöhen wir die Anzahl der Rechtecke auf 40 vergrößern sie mit einem W zwischen 600 und Und jetzt gibt es vielleicht immer noch zu viele Farben. Also werde ich eine dieser Zeilen mit roten Farben löschen und nur zwei behalten. Okay, das gefällt mir besser. Ich hoffe es gefällt dir auch. Falls nicht, können Sie gerne mit den Werten experimentieren, vielleicht die Farbe der Schatten ändern, den Mischmodus ändern, nur um mit einer Skizze zu spielen, und in der nächsten Lektion werden wir das Ganze mit einer Schnittmaske abschließen 27. Schnittmaske erstellen: Mir gefällt das Muster, das durch diese Rechtecke entsteht, aber ich denke, es fehlt etwas, und das ist eine Gelegenheit ein paar weiteren Themen zu befassen Eine Idee, die ich beim Experimentieren mit dieser Skizze hatte , war, dieses Rechteck in eine andere Form zu rahmen Wir können damit beginnen, ein Dreieck zu zeichnen. Am Ende der Renderfunktion, nachdem wir alle Rechtecke gezeichnet haben, starten wir einen neuen Codeblock mit einem Kontextpunkt speichern und einem Kontextpunkt wiederherstellen Wir bewegen den Stift in die Mitte der Leinwand, wobei der Kontext W mal 0,5 und Höhe mal 0,5 übersetzt Dann fangen wir an, eine Form mit dem Kontextpunkt „Pfad beginnen“ zu zeichnen , bewegen wir uns nach oben. Bis X Null und Y -300, dann zeichnen Sie eine Linie bis X 300 und Y 200 und eine weitere Linie bis -300 und Y bis Schließen Sie dann den Pfad, setzen Sie die Linie mit ihm auf Zehn, setzen Sie den Strichstil auf Schwarz und rufen Sie schließlich Stroke auf, um die Form zu zeichnen Und das ist unser großes Dreieck. Lassen Sie uns nun den gesamten Codeblock vor die Schleife verschieben , in der wir die Rechtecke zeichnen Und hier werden wir Context Dot Clip nennen. Alles, was nach einem Clip gezeichnet wird , erscheint innerhalb des Dreiecks. Mit anderen Worten, das Dreieck fungiert als Schnittmaske Die Schnittmaske ist Teil des Zustands des Kontextes. Wenn wir also den Zustand wiederherstellen, verschwindet die Maske In diesem Fall übersetzen wir den Kontext aber auch in die Mitte der Leinwand. Die Rechtecke sind also alle versetzt angeordnet und wir sehen nicht viele davon. Da wir die Maske wollen und den Kontext nicht wiederherstellen können, die einzige Möglichkeit darin, sie zurück zu übersetzen Übersetze im Kontext die Breite mal -0,5 und die Höhe mal 0,5 Okay, jetzt sind wir hier, aber unser Dreieck ist nicht sehr symmetrisch Ich möchte Ihnen eine andere Methode zum Zeichnen zeigen , mit der wir jedes reguläre Polygon mit einer beliebigen Anzahl von Seiten zeichnen können jedes reguläre Polygon mit einer beliebigen Anzahl von Seiten Lassen Sie uns eine neue Funktion namens Draw Polygon deklarieren. Und der Parameter wird ein Objekt mit dem Eigenschaftenkontext sein , Radius mit einem Standardwert von 100 und einer Seite mit einem Standardwert von drei Wenn wir uns nun ein Dreieck vorstellen , das perfekt in den Kreis passt, können wir sagen, dass es den Kreis in drei gleiche Scheiben teilt Der Winkel jeder dieser Scheiben ist der gesamte Umfang geteilt durch die Anzahl der Seiten Sobald wir den Winkel und die Größe der Scheibe kennen, können wir die Kanten des Polygons finden Beginnen wir mit einer Variablen namens Slice. Das ist der mathematische Punkt Pi mal zwei geteilt durch Seiten. Dann beginnen wir eine neue Form mit einem Kontext-Punkt, dem Startpfad, dann der Kontextpunkt, der sich um zwei X, Null und Y minus Radius bewegt. Dann benötigen wir eine Schleife mit vier, die bei einer beginnt und über die Anzahl der Seiten iteriert Hier benötigen wir einen Winkel, der auf I basiert , damit wir eine neue Variable dafür deklarieren können Ich nenne es Theta und setze es auf I Time Slice. Dann können wir die Linien unserer Form mit einem Kontext-Punkt, Linie zwei X wird der Kosinus des Hetats-Radius und der Y-Sinus des Hetats-Radius Wenn Sie sich an den Zeiger der Uhr erinnern , den wir in der ersten Lektion gesehen haben, ist das Prinzip hier dasselbe. Dann schließen wir außerhalb der Schleife den Pfad. Jetzt können wir hier unseren Draw Cod Sap durch diese neue Funktion ersetzen . Zeichnen Sie also ein Polygon und wir übergeben es im Kontext. Radius, sagen wir, 400 und Größe drei. Nun, etwas stimmt nicht, und das liegt daran, dass ich beschlossen habe, die Form von oben zu zeichnen , und das ist nicht die Position von Null Grad. Wie Sie sich vielleicht erinnern, ist Null Grad um 3:00 Uhr aber ich möchte die 12:00 Uhr als Startpunkt verwenden Was wir tun müssen, ist 90 Grad von Heta oder minus Mathepunkt Pi mal 0,5 zu subtrahieren . Das ist besser. Versuchen wir es mit fünf Seiten. Oder sechs. Jede Zahl größer als drei würde hier funktionieren. Nun, das gefällt mir nicht. Der Strich des Polygons erscheint hinter dem Rechteck, also muss ich den Clip und die Maske von der Polygonkontur trennen , was bedeutet, dass ich draw polygon zweimal aufrufen muss, einmal mit dem Kontext Dot Clip und einmal mit dem Kontext Dot Stroke, da beide Polygone dieselben Eigenschaften haben werden Wir haben bereits gelernt, dass der beste Weg, mit diesem Szenario umzugehen, darin besteht, die Eigenschaften in einem Objekt zu speichern Also lasst uns hier oben ein neues Objekt namens mask deklarieren . Bei den Eigenschaften handelt es sich um den Radius , den ich auf 40% der verschweißten Fläche setzen möchte, und dann auf die Seiten, was drei sein wird Und wenn Sie ein Objekt erstellen, warum nicht auch X- und Y-Eigenschaften speichern Also X wurde mal 0,5 verheiratet und Y-Höhe mal 0,5. Bevor wir nun das Dreieck zeichnen, können wir in den Maskenpunkt X und den Maskenpunkt Y übersetzen und dann das Polygon zeichnen, indem wir den Maskenpunktradius und die Maskenpunktgröße passieren Maskenpunktradius und die Maskenpunktgröße Und dann brauchen wir nur noch den Call to Context Dot Clip. Diese andere Zeile können wir abschneiden und wir werden sie an das Ende der Funktion verschieben. Kurz bevor wir das innerhalb der rechteckigen Schleife machen, können wir das Maskenobjekt auch für die zweite Übersetzung verwenden . Diesmal minus Maskenpunkt x und minus Maskenpunkt. Jetzt, am Ende der Funktion hinter der Schleife, zeichnen wir den Umriss des Polygons praktischen Gründen beginnen wir mit dem Kontext Punkt speichern und Kontext Punkt wiederherstellen und übersetzen dann den Kontext erneut Punkt G und Punkt Y übereinstimmt. Fügen Sie die Zeilen ein, die wir von oben kopiert haben, und hier können wir auch den Aufruf zum Zeichnen eines Polygons kopieren Und da ist unsere Gliederung. jetzt vor den Rechtecken erscheint, Dreieck, das jetzt vor den Rechtecken erscheint, ist nicht wirklich vertikal zentriert, und es gibt ein paar Möglichkeiten, das zu korrigieren Aber ich denke, wir können mit einem schnellen Cheat durchkommen und einfach die Y-Eigenschaft der Maske auf hoch mal 0,58 ändern Vielleicht könnte die Konturfarbe auch von rechteckigen Farben stammen und sie könnte doppelt so dick sein wie die Linienstärke 20, und wir könnten sogar einen anderen Mischmodus verwenden Dieses Mal werde ich mich für die globale Verbundoperation entscheiden . Farbe Vogel. Bei diesem Mischmodus wäre es meiner Meinung nach besser, wenn sich die Konturen innerhalb des Dreiecks befinden würden , damit wir den Radius so ändern können , dass der Punktradius maskiert wird. Minus Kontext-Punktlinie W. Okay, das ergibt einige interessante Variationen. Dies ist unser Sketch, aber ich möchte noch ein weiteres Thema behandeln, bevor wir diesen schließen, nämlich Random Seed. 28. Erstelle einen zufälligen Samen: Sie erinnern sich vielleicht aus unserer Lektion über Verteilung, dass ich gesagt habe, dass es zwei Möglichkeiten gibt , Zufallswerte zu kontrollieren. Die erste Möglichkeit bestand darin, sie einmal zu erstellen und zu speichern. Jetzt schauen wir uns den zweiten an, der in einem zufälligen Seed gespeichert ist . Das Konzept hier ist, dass, sobald Sie Ihrer Zufallsfunktion einen Startwert zugewiesen haben, alle nachfolgenden Aufrufe von random immer dieselbe Wertesequenz zurückgeben. Es gibt eine Methode namens set SED parentheses. Das Zufallsmodell von Canvas Sketch UTL verwenden wir hier in der ersten Zeile der Ich setze meinen Startwert auf 555, protokolliere dann dreimal hintereinander einen zufälligen Wert in der Konsole und öffne die Konsole. Die Zahl, die ich hier sehe, sollte die gleiche Zahl sein, die Sie auf Ihrem Computer sehen, unabhängig davon, ob Sie sich auf einem PC oder einem MC befinden und die gleiche Zahl sein, die Sie auf Ihrem Computer sehen, unabhängig davon, ob Sie sich auf einem PC oder einem MC befinden das Offline-Setup oder das Online-Setup verwenden Wenn Ihr Sketch dieselbe Anzahl an zufälligen Aufrufen hat wie meiner, und zwar in derselben Reihenfolge, sollte auch exakt dieselbe visuelle Ausgabe angezeigt werden. Und der Samen muss keine Zahl sein. Es könnte Stärke sein. Versuchen wir es mit einer Schraube. Selbst wenn wir die Seite aktualisieren, ist das Ergebnis immer noch dasselbe. Wenn Sie also den Samen kennen, können Sie bei jeder Ausführung des Codes dieselbe Skizze konstant reproduzieren des Codes dieselbe Skizze konstant jeder Ausführung Wenn Sie dennoch zufällige Variationen erhalten möchten, Sie beim Aktualisieren der Seite den können Sie beim Aktualisieren der Seite den Ausgangswert selbst als Zufallswert festlegen Lassen Sie uns eine Variable namens SID geheim halten und sie jetzt auf date dot setzen Dies ist die aktuelle Zeit in Millisekunden. Diese Zahl wird also immer anders sein. Eine Alternative besteht darin, eine andere Methode von Canvas Sketch Uto zu verwenden , die als Get Random Set bezeichnet wird. Wenn Sie das gewünschte Ergebnis gefunden haben, können Sie den Wert des Sitzes protokollieren und ihn irgendwo aufschreiben. Oder wenn Sie das Offline-Setup verwenden, können Sie den Namen der Datei ändern, die gespeichert wird , wenn Sie Strg S drücken. Gehen Sie zu der Einstellung und verwenden Sie den Namen seed. Klicken Sie auf den Browser, drücken Sie Strg S oder Befehl S, um die Skizze zu speichern Anschließend können Sie den Startwert aus dem Dateinamen kopieren. Fügen Sie ihn hier ein, um exakt dieselbe Skizzenfolie neu zu erstellen. Das ist es für unsere erste Skizze. Das Ergebnis ist immer noch recht einfach, aber ich hoffe, Sie stimmen zu, dass wir dadurch viele Themen behandeln konnten , die in Zukunft nützlich sein können, wenn Sie etwas erstellen, das völlig anders aussieht. Und als Nächstes, hör zu, werden wir mit einer neuen Skizze beginnen. 29. Erstelle Qudratische Kurven: Die vorherige Skizze hat Spaß gemacht. Wir haben damit ziemlich viel gelernt, aber jetzt werden wir etwas anderes machen und eine neue Technik lernen. Wie zeichnet man dynamische Kurven. Zuallererst müssen wir eine neue Skizze beginnen. Wenn Sie sich in Stack-Builds befinden oder Sandbox aufrufen, einfach die Standardvorlage, wie Sie es beim letzten Mal getan haben Und wenn Sie Dinge vom Terminal aus ausführen, drücken Sie Strg C, um den aktuellen Vorgang zu beenden, und geben Sie Canvas Sketch Dash Curves, Intro und dann Dash New Öffnen Sie dann die JavaScript-Datei im Editor und ändern Sie die Dimension 1080 mal 1080, genau wie wir es in unserer ersten Skizze getan haben Bevor wir mit der Arbeit an den Grafiken beginnen, die wir erstellen möchten, möchte ich dieses Intro verwenden, um über Kurven im Allgemeinen zu sprechen Wir können damit beginnen, eine gerade Linie zu zeichnen. Wir geben den Kontext Punkt Begin Path ein. Dann den Kontextpunkt um zwei verschieben. Ich werde noch keine Kontext-Transformation verwenden. Behalten wir die Koordinate ab 00 oben links bei. Also Kontext-Punkt verschiebe zwei, X 200 und Y 540. Dann Kontext-Punkt Linie zwei, 880 und immer noch Y 540. Und schließlich kontextualisieren Sie den Schlaganfall. Hier beginnen wir also mit einer neuen Form, einen virtuellen Stift an diesen Punkt bewegt und dann der Capace-API mitgeteilt, dass wir das Pixel von hier nach hier in einer geraden Linie malen wollen das Pixel von hier nach hier in einer geraden Linie malen Die Funktion, die berechnet, welche Pixel gemalt werden müssen, ist uns verborgen Sie ist Teil der Browser-Implementierung der API. Zeile zwei ist also eine praktische Methode. Um Kurven zu zeichnen, haben wir zwei dieser Methoden, von Kurve zu Kurve zwei unquadratisch Bei der Bezier-Kurve müssen wir Punkte kontrollieren, müssen wir Punkte kontrollieren, und bei der quadratischen Wir werden die quadratische Kurve von demselben Punkt aus zeichnen , an dem wir zuvor angefangen haben, Wir werden den Kontext Punkt Quadric Curve Two eingeben. Die ersten beiden Argumente sind X und Y des Kontrollpunkts, und die letzten beiden sind X und Y des Encor-Punkts oder des Endpunkts Wir können den Endpunkt dort belassen, wo er bei 800 8.540 war. Nehmen wir nun an, wir wollen hier einen Punkt kontrollieren, von dem ich sagen würde, dass er bei X 400 und Y 300 liegt Jetzt haben wir eine Linie, die zu diesem Bereich hin übergeht. Wir können uns hier einen Punkt vorstellen. Wir sollten diese Punkte eigentlich zeichnen, damit wir sie sehen können. Und wir könnten ihnen verschiedene Farben geben , damit wir wissen, welche Kontrollpunkte und welche Ankerpunkte sind. Um den Code übersichtlich zu halten, können wir den Punkt als separate Entität behandeln und eine Klasse dafür erstellen Am Ende der Datei geben wir class point ein, und im Konstruktor übergeben wir ein Objekt mit den drei Eigenschaften X, Y und control, die standardmäßig fallen Dann speichern wir diese Werte in Zahleneigenschaften, wobei dieser Punkt X gleich X, dieser Punkt Y gleich Y ist. Und dieses Punktsteuerelement entspricht Kontrolle Wir wissen, dass wir die Punkte zeichnen wollen, also können wir bereits eine Methode namens draw beenden , die einen einzigen Parameter benötigt, nämlich den Kontext, in den wir hineingezogen werden Wie üblich beginnen wir mit dem Context Dot Save und Context Dot Restore. Dann übersetzen wir den Kontext diesen Punkt X und diesen Punkt Y, der Punkt kann als Kreis gezeichnet werden, also der Kontextpunkt beginnt mit dem Pfad und dann mit dem Kontextpunktbogen und wir sind schon bei X und Y, weil der Kontext nicht übersetzt wird, also ist das Null, Null. Der Radius kann zehn sein, der Anfangswinkel Null und der Endwinkel Pi mal zwei, dann die Kontext-Punktfüllung. Und wir können die Eigenschaftensteuerung verwenden , um den Feldstil festzulegen. Der Feldstil entspricht also diesem Punktsteuerelement. Wenn es wahr ist, verwende Rot oder Schwarz. Wir werden in einer Minute sehen, was das bewirkt. Zuerst müssen wir unsere Punkteklasse verwenden. also hier oben in der Sketch-Funktion ein Array namens Punkte ausschneiden, Lassen Sie uns also hier oben in der Sketch-Funktion ein Array namens Punkte ausschneiden, das bereits mit drei Punkten gefüllt ist das bereits mit drei Punkten gefüllt Neuer Punkt X 200 Y 540, nächster Punkt X 400, Y 300 Und diese Zeitkontrolle ist wahr. Und der letzte Punkt X 880 und Y 540. Jetzt können wir diese fest codierten Werte durch die Punkte in unserem Array austauschen . Zeigen Sie zuerst auf die eckige Klammer Null X, dann auf 0,0 Y. Hier Punkte, ein X, Punkte, ein Y, und dasselbe gilt auch für Punkte in eckigen Klammern Um schließlich alle Punkte zu zeichnen, können wir für jeden Punkt Punkt verwenden und die Variable Punkt nennen Dann rufen wir innerhalb der Funktion point dot draw and pass im Kontext auf. Jetzt können wir deutlich sehen, was der Kontrollpunkt tut. können gerne verschiedene Koordinaten ausprobieren , um zu sehen, wie dieser Effekt zustande kommt. Dies ist nicht das visuelle Ergebnis, nach dem wir streben. Wir arbeiten gerade an einer neuen Technik. Wir werden bald zu unserem Bild kommen. Aber ich möchte diese Gelegenheit nutzen, um über etwas anderes zu sprechen, das hier Sinn macht, auch wenn wir es nicht in unserer endgültigen Skizze verwenden werden. Ich spreche von der Cursorinteraktion , genau das wird in der nächsten Lektion behandelt. 30. Erstelle eine Cursor-Interaktion: Schauen wir uns an, wie der Cursor mit einem Element in unserer Skizze interagiert. Mausklick ist ein Ereignis, bei dem der Computer nicht weiß, wann Sie die Maustaste oder das Trackpad drücken werden , aber er kann darauf reagieren, wenn es passiert Es gibt Dutzende von Arten von Ereignissen, und der Browser kennt sie alle, aber er gibt diese Informationen nicht an Sketch weiter , es sei denn, wir fragen auch Bevor wir also auf irgendeine Art von Ereignis reagieren können, müssen wir einen Event-Listener hinzufügen Diese Funktion teilt dem Browser unser Code ein Ereignis abhören möchte und dass eine bestimmte Funktion Code sein soll, wenn es passiert Ein Event-Listener kann dem gesamten Browserfenster oder einem bestimmten Element hinzugefügt werden dem gesamten Browserfenster oder einem bestimmten Element Wenn wir zum Beispiel eine Schaltfläche hätten, könnten wir den Button-Punkt Ed Event Listener wählen Das ist nicht unser Fall. Wir haben nur ein einziges Element auf der Seite, und das ist das Canvas-Element. Das wird also das Ziel unseres Zuhörers sein. Das Ereignis, an dem wir interessiert sind, heißt Mouse Down, und die Funktion, die wir aufrufen werden, wird auf Mouse Down ausgeführt, was wir gleich deklarieren werden. Beachten Sie, dass wir nicht einfach Zuhörer zu diesem oder diesem Kreis hinzufügen können Zuhörer zu diesem oder diesem Kreis Dies sind keine unabhängigen Entitäten soweit es den Browser betrifft Der Browser kennt nur ein Element auf der Seite, und das ist die Pixelkarte. Was wir auf dieser Karte zeichnen, liegt bei uns. Wenn wir also wollen, dass jeder Punkt auf die Cursorinteraktion reagiert, müssen wir etwas mehr Code schreiben. Beginnen wir mit der Deklaration der Funktion bei gedrückter Maus , die wir im Listener erwähnt haben Sie erhält einen Parameter , nämlich das Event-Objekt. Wir nennen es einfach E. Ich möchte immer dann, wenn die Maus gedrückt ist , diesen Punkt verschieben können. Und wenn die Maus losgelassen wird, möchte ich mit dem Ziehen aufhören Dafür benötigen wir zwei weitere Zuhörer, die wir hier deklarieren können Dies kann zu den gesamten Browserfenstern hinzugefügt werden , da wir zu diesem Zeitpunkt bereits wissen, dass die Maus gedrückt wurde, während sie sich über der Leinwand Also Fensterpunkt d sogar Listener bei Mausbewegung, was die Funktion ist, die wir gerade erstellen, und fenstergepunkteter Event-Listener Maus hoch und Maus hoch, lassen Sie uns diese Funktion bei Mausbewegung deklarieren, die ebenfalls ein Mausereignis empfängt, und bei geöffneter Maus, für die keine Parameter benötigt Die Kernfunktionalität wird intern bei gedrückter Maus und Mausbewegung ausgeführt. Aber wir können es bereits bei Mouse up implementieren , denn das Einzige, was wir hier brauchen , ist, den Listener zu entfernen, wir fügen ihn bei gedrückter Maus Nun, dieses Muster diesen Listener bei gedrückter Maus hinzuzufügen und ihn bei gedrückter Maus zu entfernen, ist nicht unbedingt notwendig Sie könnten einfach alle drei Listener in der Sketch-Funktion hinzufügen und alles würde gut funktionieren Mir gefällt die Art und Weise, wie wir es hier gemacht haben, denn selbst wenn Sie den Cursor die ganze Zeit bewegen, fasziniert die Skizze den Bowe Move-Zuhörer Sofern die Maus nicht gedrückt ist, ist das eine kleine Optimierung, aber wenn sie nützlich sein kann, also nutze ich diese Gelegenheit um Ihnen davon zu erzählen Jetzt endlich ein Einblick in die Mausbewegung, wir müssen herausfinden, wo sich der Cursor befindet. Das Event-Objekt wird uns das sagen. Lassen Sie uns in der Konsole E von Satz X und E Punkt von Satz Y protokollieren. Wechseln Sie dann zum Browser, öffnen Sie die Konsole, klicken Sie und ziehen Sie die Maus herum Diese Werte sind in Pixeln angegeben und werden bereits durch die Position unseres Canvas-Elements auf der Seite verschoben Wenn Sie hier oben links in unserer Skizze nach oben gehen, sehen wir eine Zahl nahe Null, Null, und wenn wir nach unten rechts gehen, sollten wir eine Zahl in der Nähe von 1080 mal 1080 sehen, aber wir müssen trotzdem nicht ein paar Anpassungen vornehmen. Je nachdem, wie groß Ihre Bildschirmauflösung ist, könnten Sie an dieser Ecke tatsächlich 1080 mal 1080 sehen. Ich nicht, weil meine Auflösung nicht hoch genug ist. Standardmäßig rezitiert die Skizze von Canvas die Leinwand, sodass wir sie in ihrer Gesamtheit sehen können Selbst wenn Sie eine 4.000-Pixel-Skizze erstellt haben, sehen wir immer noch die gesamte Skizze in diesem Bereich. Diese Skalierung müssen wir berücksichtigen, wenn wir versuchen herauszufinden, wo der Cursor die Gruppen X und Y verwendet. Die Mathematik ist einfach Wir benötigen lediglich einen Verweis auf das Canvas-Element, auf das wir innerhalb dieser Funktion zugreifen können Ich werde eine neue Variable namens Canvas deklarieren und sie auf den Canvas-Parameter setzen, den wir in der Sketch-Funktion erhalten. Jetzt können wir innerhalb der Mausbewegung eine Umkehrung verwenden, um die proportionalen X- und Y-Koordinaten zu berechnen Fangen wir mit X an. Die Kosten X entsprechen der Klammer E, dem Punktversatz X geteilt durch die Punktversatzbreite von Cvas. Die Offsetbreite ist die tatsächliche Breite des Canvas-Elements auf dem Bildschirm Offset X geteilt durch Offsetbreite ergibt also eine Zahl 0-1. Dann müssen wir nur noch die binominale Breite der Leinwand multiplizieren , was Canvas, Punktbreite ist Duplizieren Sie nun die Linie und machen Sie dasselbe für Y, ersetzen Sie sie durch die Höhe Loggen wir X und Y, oben links, bleiben eine Zahl nahe Null, Null und zeigen jetzt unten rechts endlich eine Zahl in der Nähe von 1080 mal 108. Diese kleine Formel gibt uns Proportionen der X- und Y-Werte, unabhängig davon, wo sich die Leinwand auf dem Bildschirm befindet oder wie groß sie ist. Wie können wir nun feststellen, ob der Cursor über einem Punkt schwebt oder nicht? Wie gesagt, der Browser weiß nicht dass es hier einen Kreis gibt, aber wir wissen Also müssen wir es selbst berechnen. Wir müssen Punkt für Punkt überprüfen und einen Treffertest durchführen der auf der Entfernung zwischen dem Cursor und der Position des Punkts basiert . Fügen wir unserer Punktklasse eine neue Funktion namens Hit Test hinzu, die zwei Parameter, X und Y, benötigt. Hier brauchen wir die Hilfe von Pythagoras Lassen Sie uns die Formel kurz zusammenfassen. Nimm zwei Punkte auf einer Ebene mit zwei D, wobei der Abstand zwischen den Punkten DX und DY Wir erhalten ein rechtwinkliges Dreieck, und der tatsächliche Abstand zwischen den Punkten entspricht der Hypotene des Die Formel zur Ermittlung der Hypotene ist die Quadratwurzel der Summe der Quadrate der Seiten Das ist eigentlich sehr einfach in Code zu schreiben. Wir haben dx, das ist dieser Punkt x minus X, also das Delta zwischen dem X, das übergeben wurde, und dem X des Punktes, dasselbe gilt für DY. Und dann ist die tatsächliche Entfernung, die ich DD nenne , eine mathematische Punkt-Quadratwurzel. X mal X plus Tag mal Tag. Test „ Wahr“ oder „Fällt“ zurück Je nachdem, ob die Entfernung kleiner als etwas ist, gibt der . Wir wissen, dass der Radius unseres Kreises zehn ist, also mache ich den Trefferbereich etwas größer und gebe ihn zurück, wenn DD kleiner als 20 ist. Jetzt können wir Hit test inside mit gedrückter Maus verwenden. Wir benötigen auch hier die eingestellte X - und Y-Position. Kopieren Sie sie einfach von einer Mausbewegung und fügen Sie sie hier ein. Gehen von einer Mausbewegung und fügen Sie sie hier dann durch alle Punkte mit einem Punkt für jeden Punkt und erstellen Sie eine neue Eigenschaft dem Namen Ist Drache, die dem Punktpunkttrefftext X und Y entspricht. Diese neue Eigenschaft speichert einen Wert , den wir bei der Mausbewegung verwenden können Falls Ihnen der Name Drache nicht gefällt, können Sie auch etwas anderes verwenden, z. drücken Sie ihn nach Belieben nach unten oder drücken Sie Nun zur Mausbewegung, wir benötigen eine weitere Schleife, also auf jeden Punkt zeigen, und wenn der Punkt ein Drache ist, wollen wir die Punktposition auf die Cursorposition setzen. Punkt X ist gleich X und Punkt Y gleich Y. Nur noch zwei Dinge, bevor wir das in Aktion sehen können, benötigen wir eine animierte Skizze In der Einstellung fügen wir also ein animiertes T hinzu, und die Punktvariable muss in der gesamten Skizze sichtbar sein Also müssen wir es hier oben deklarieren. Jetzt können wir auf unsere Punkte klicken und die quadratische Kurve im Handumdrehen ändern Wir befinden uns immer noch in einer Lektion über die Kurven, aber lassen Sie uns unsere Einführung zur Cursorinteraktion zusammenfassen unsere Einführung zur Cursorinteraktion Wann immer Sie eine Mausinteraktion in Ihrer Skizze wünschen, müssen Sie zuerst Ereignis-Listener hinzufügen, die Event-Handler oder die Funktionen deklarieren, die aufgerufen werden, wenn das Berechnen Sie die korrekte Position des Cursors, orientieren Sie sich an der Skala der Leinwand und machen Sie dann mit dieser Position, was Sie benötigen, sei es, um mit der Maus zu zeichnen oder auf eine Form zu klicken, wie wir es hier getan haben Cursorinteraktion wird uns auch in der nächsten Lektion nützlich sein, in der wir weiter etwas über Fluch lernen werden. 31. Mehrere Punkte erstellen: Das ist immer noch nicht unsere Hauptskizze. Es gibt noch einen weiteren Aspekt, den ich behandeln möchte, und es ist einfacher, ihn isoliert so zu erklären. Wir werden unsere Bilder in der nächsten Lektion bekommen. In diesem Fall werden wir uns mit nahtlosen Kurven befassen. Fügen wir unserem Array zwei weitere Punkte hinzu. Wir können dieses Steuerelement jetzt loswerden, dann die letzte Zeile duplizieren und X auf 600 und Y auf 700 ändern. Ein weiteres Duplikat, X 640 und Y 900. Jetzt können wir eine weitere Kurve zeichnen, indem wir diese Linie duplizieren und die Würfel auf drei und vier ändern Wir könnten das sogar so umschreiben , dass es mit einer beliebigen Anzahl von Punkten funktioniert , anstatt die Indizes von Hand einzugeben Wir machen das mit einer Vierer-Schleife, wobei ich bei eins beginne, bis zur Punktlänge hochgehe und bei jeder Iteration um zwei erhöht Dann nehmen wir nur eine dieser Linien und reihen die Quadrac-Kurve auf I Und ich plus eins, wir müssen natürlich zu nichts Null hinzufügen Dies dient nur dazu, den Code symmetrischer und vielleicht lesbarer Das Ergebnis ist dasselbe, aber jetzt können wir unserem Array mehr Punkte hinzufügen, wenn wir wollen Bei fünf Punkten ist es ziemlich klar, dass wir zwei Kurven zeichnen und keine einzige Kurve. Was wäre, wenn wir mit all diesen Punkten eine einzige nahtlose Kurve zeichnen wollten ? Dafür gibt es eine Technik, die ich vor langer Zeit von einem Künstler namens Eric Nazi gelernt habe , der seine Kunst mit Code kreiert und viele Kurven verwendet. Die Technik beinhaltet Mittelpunkte. Wir müssen uns all diese als Kontrollpunkte vorstellen. Die Ankerpunkte werden sich in der Mitte von zwei aufeinanderfolgenden Punkten befinden. Es wird sinnvoller sein, wenn wir es sehen. Also müssen wir zuerst den Code schreiben. Versuchen wir, gerade Linien zwischen den Punkten zu zeichnen. Wir können diesen Codeblock duplizieren , weil er ähnlich sein wird. Statt quadratischer Kurve zwei verwenden wir Zeile zwei mit nur X und Y. Ändern Sie das Inkrement auf Eins oder nur I plus Plus, was dasselbe ist, und setzen Sie dann den Strichstil auf 999, was hellgrau ist Lassen Sie uns die Kurven zunächst auskommentieren. Es ist jetzt vielleicht etwas einfacher, sich vorzustellen der Punkt in der Mitte dass der Punkt in der Mitte dieser Linie der erste Anker ist. Dies ist der Kontrollpunkt und die Mitte der nächsten Linie ist der nächste Ankerpunkt. Lassen Sie uns diese Mittelpunkte zeichnen. Wir beginnen neu für die Schleife bis zur Punktlänge minus eins. Wir wollen zwei Variablen. Eine für den aktuellen Punkt ist Index I plus Null und eine für den nächsten Punkt , der Index I plus eins ist. Für den Mittelpunkt können wir auch zwei Variablen verwenden. Ich beginne mit der X-Position und nenne sie X. Es ist das aktuelle X plus die Differenz zwischen dem nächsten X und dem aktuellen X geteilt durch zwei oder multipliziert mit 0,5 Das ist die aktuelle Position plus Hälfte der Entfernung zum nächsten Punkt Duplizieren Sie diese Linie und tauschen Sie X durch Y. Jetzt können wir diesen Mittelpunkt mit dem Anfangspfad, dann den Bogen X und Y zeichnen , ihm einen Radius von fünf geben und dann mit dem Winkel Null beginnen und mit dem Winkel Pi mal zwei enden Lassen Sie uns den Feldstil auf Blau setzen und fill aufrufen. Es ist etwas einfacher, sich vorzustellen, was wir jetzt mit den Kurven machen werden, also lasst uns sie zeichnen. Wir können dieselbe Schleife verwenden und vor der Schleife eine neue Form mit dem Kontextpunkt Startpfad vor der Schleife eine neue Form beginnen. Wir können diesen Mittelpunkt auskommentieren nur um uns auf die Kurve zu konzentrieren Kontext-Punkt, quadratische Kurve zwei. Der Kontrollpunkt wird das aktuelle X und Y sein, und der Ankerpunkt wird X und Y sein. Nach der Schleife nennen wir Context Dot Stroke, aber davor können wir die Linie mit ihr zu weit setzen und den Strichstil auf Blau setzen Jetzt sehen wir eine nahtlose Kurve, die alle unsere Punkte verwendet. Die Kurve verläuft nicht durch die Punkte, sondern verwendet sie als Kontrollpunkte. Die erste beginnt als gerade Linie vor der Kurve, aber das können wir mit einfachen Bedingungen korrigieren Wenn I Null ist, verschiebt der Kontext entweder zwei, X und Y, oder er hat die Kurve bestimmt Jetzt verhalten sich alle Punkte gleich falls wir wollen, dass der erste und der letzte Punkt Anker sind Wir können unsere Bedingungen ändern, um dem Rechnung zu tragen. Wenn I Null ist, verschiebe zwei Kurvenpunkte X und Kurvenpunkt Y. Dadurch beginnt die Kurve am ersten Punkt und ist etwas länger als der andere Das Gleiche können wir für die letzte Punktbreite tun. Andernfalls, wenn I gleich der Punktlänge minus zwei ist, Kontext-Punkt, quadratische Kurve zwei, Curd-Punkt G, Cut Y, nächster Punkt g und Nxdty Nxdty Dies ist eine ziemlich einfache Technik, die es uns ermöglicht, Kurven mit einer beliebigen Anzahl von Punkten zu zeichnen Tatsächlich können wir leicht weitere Punkte hinzufügen , um das in Aktion zu sehen. Scrollen wir nach unten zu unserer Funktion, die am weitesten unten steht. Vor dem Loop erstellen wir eine neue Variable namens hit und setzen sie auf folds. Dann fügen wir die Bedingung I hit is still folds hinzu, und wenn Point ein Drache ist, das heißt, wenn die Zeile darüber den Wert true zurückgibt Hit dann auf True setzt. Dadurch erfahren wir, ob ein Punkt am meisten unten getroffen wurde. Falls nichts getroffen wurde, erstellen wir einen neuen Punkt an der Cursorposition. Wenn also kein Treffer auf Punkt drückt, neuer Punkt, X und Y zeigt. Wenn wir jetzt auf einen Punkt klicken, können wir ihn immer noch wie zuvor ziehen Wenn wir jedoch außerhalb eines beliebigen Punktes klicken , erstellen wir einen neuen So können wir uns umklicken und den Fluch immer weiter verlängern. Jetzt wissen wir genug über Curve, um mit ihnen zu arbeiten. Sie können diese Enter-Skizze als Referenz sowohl für Mausinteraktionen als auch für Mehrpunktkurven verwenden, nur für den Fall, dass Sie in Zukunft eine dieser Techniken benötigen in Zukunft eine dieser Techniken 32. Erfahre mehr über die Erstellung von Rastern: Hier werden wir das anwenden , was wir über Kurven gelernt haben. Wir werden ein Punktraster erstellen und Kurven zwischen ihnen zeichnen. Lassen Sie uns die Kurven als separate Skizze belassen und eine neue erstellen. Wenn Sie den Online-Editor verwenden, erstellen Sie einfach eine weitere Kopie der Standardvorlage. Wenn Sie das Terminal verwenden, drücken Sie Strg C, um den letzten Vorgang zu beenden , und geben Sie dann Canvas, Sketch, Sketch Curves und New ein. Öffnen Sie die Kurvenskizzierdatei im Editor und ändern Sie wie gewohnt die Abmessung 1080 mal 1080. Wie gesagt, wir werden ein Punktraster erstellen, und wir können weitermachen, indem wir zunächst die Punktklasse kopieren. Wir haben in den Kurven eine Intro-Skizze erstellt. Kopieren Sie einfach die gesamte Klasse und fügen Sie sie hier am Ende der Datei Wir können es jetzt einfacher machen. Wir benötigen die Treffertest-Funktion nicht mehr und wir benötigen die Eigenschaft control nicht mehr. Wählen Sie für den Feldstil eine beliebige Farbe aus. Ich entscheide mich für Rot. Jetzt gehen wir zur Skizzierfunktion und beginnen mit der Definition des Rasters. Wir werden ein paar Variablen benötigen. Die ersten beiden sind die Anzahl der Spalten und Zeilen im Raster. Aufrufe sind also gleich 12 und Zeilen gleich sechs. Es ist auch hilfreich, die Gesamtzahl der Zellen zu speichern, bei der sich um Calt-Zeilen handelt Als Nächstes benötigen wir zwei weitere Variablen für die Breite und Höhe des Rasters Die Rasterbreite oder GW entspricht der Breite der Leinwand mal 0,8, was 80% der breitesten Fläche der Leinwand bedeutet GH wird 80% der Höhe ausmachen. Wir haben diese Immobilie noch nicht verheiratet und groß, aber wir wissen, dass sie verfügbar sind Sie werden auch an die Sketch-Funktion übergeben, sodass wir sie nur deklarieren müssen Sie als Nächstes die Dimension jeder Zelle ist die bewaldete Zelle oder CW die Breite des Rasters geteilt durch die Anzahl der Spalten, und CH ist die Höhe des Rasters geteilt durch die Wir können auch die Verschmelzung um das Gitter herum finden. Die Verschmelzung auf der X-Achse ist der Unterschied zwischen den Breiten der Leinwand und den Breiten des Rasters Durch zwei geteilt, und das Gleiche gilt für die Verschmelzung auf der Y-Achse. Dies sind alles Eigenschaften, die wir benötigen , um ein Raster zu definieren. Aber jetzt können wir unsere Punkte platzieren, erste Array, um alle Punkte zu speichern. Gehen Sie dann für Loop alle Rasterzellen durch, wo wir in das Punkte-Array einen neuen Punkt einschieben werden. Und übergeben Sie X und Y. Jetzt müssen wir nur noch X und Y definieren . X wird ein Rest sein Der Rest-Operator sorgt dafür , dass die Zahl zwischen 0 und 11 aussieht. Jedes Mal, wenn ich ein Vielfaches von 12 erreiche, geht es auf Null zurück. Um die Position zu ermitteln, müssen wir sie nur mit der Breite der Zelle multiplizieren. Y wird Mathe Dot Floor sein. Ich teile es durch Kohlen, also fange ich bei Null an und erhöhe dann eins, zwei, drei, vier usw., bis ich 12 erreiche Diese Division gibt Null zurück, etwas wir sind Fluor es, also Null, etwas wird Null Dann 12-23, das wird eins sein und so weiter. Das gibt uns den Index der Zeile, und um die Y-Position zu erhalten, müssen wir das nur mit der Höhe der Zelle multiplizieren Lassen Sie uns nun diesen Punkt skizzieren. Ich werde die Hintergrundfarbe auf Schwarz ändern und den Transformationsblock mit einem Kontextpunkt speichern und einem Kontextpunkt wiederherstellen Dann übersetze ich die Kontexte in Mx und MY , also den oberen und linken Rand. Und schließlich zeichnen Sie die Punkte mit jeweils einem Punktpunkt. Punkt, Punkt, Kontext zeichnen. Wir können die Note jetzt sehen, aber die Ausrichtung ist falsch. Das liegt daran, dass die Punkte an der Ecke jeder Zelle platziert sind . Um sie in die Mitte der Aufrufe zu verschieben, können wir einen weiteren Kontextpunkt hinzufügen der der Hälfte der Zellenbreite und der Hälfte der Zellenhöhe entspricht. Und da ist es unser dynamischer Grad. Wir können die Anzahl der Spalten oder Zeilen ändern und alles fällt einfach an einen Ort. Lassen Sie uns nun Linien zwischen diesen Punkten zeichnen. Lassen Sie mich zuerst den Strichstil festlegen, und ich werde wieder Rot verwenden und dann die Linienstärke auf vier setzen. Wir wollen eine Zeile pro Zeile, also brauchen wir 24 Schleifen. Die erste geht durch die Zeilen, sodass wir die Variable R für Zeilen benennen können. Die zweite geht durch die Spalten, also nennen wir die Variable C für Spalten. Wir müssen in jeder Zeile eine neue Zeile beginnen, also beginnt der Kontextpunkt mit dem Pfad am Anfang der Schleife und dann der Kontext-Punktstrich am Ende der Schleife. Innerhalb der zweiten Schleife benötigen wir für jeden Punkt eine Position. Der Kostenpunkt entspricht zwei eckigen Klammern. Der Index des Punktes innerhalb der Schleife entspricht dem Index der Zeile multipliziert mit der Anzahl der Spalten plus dem Index der Spalte Dann benötigen wir den Kontextpunkt Move Two, Punkt X und Punkt Y, was nur für den ersten Punkt passieren muss , damit wir die Bedingung vorbereiten können , falls kein C oder wenn C Null ist. Oder aber für jeden zweiten Spaltenindex Kontextpunkt Zeile zwei, X und Y. das an der richtigen Stelle haben, folgen die Linien, wenn wir die Punkte verschieben Lassen Sie uns das mit der Noise-Funktion machen. Auch hier wird sich Canvas Sketch UT als nützlich erweisen , da es im Zufallsmodul bereits über eine Rauschfunktion verfügt . Wenn Sie das lokale Setup verwenden und den Kurs chronologisch verfolgen, haben Sie Canvas Sketch UT bereits installiert, da wir es in der vorherigen Lektion installiert Wenn Sie einen Online-Editor verwenden, geben Sie einfach Canvas Sketch UTL in das Feld Devanta C Dann müssen wir es mit zufälligen Gleichungen angeben, um Canvas Sketch TL random zu benötigen Canvas Sketch Die Noise-Funktion gibt eine Zahl zurück , die wir in einer Variablen namens N speichern werden . Rauschen eignet sich hervorragend, um Strukturen wie unserem Gitter, die sehr gerade und präzise sind, ein organisches Gefühl zu verleihen um Strukturen wie unserem Gitter, die sehr gerade und präzise sind, ein organisches Gefühl zu die sehr gerade und präzise sind Sie unterscheidet sich von einer reinen Zufälligkeit. Wenn wir die Rauschfunktion mit fortlaufenden Zahlen füttern, erhalten wir Zufallszahlen, die ineinander fließen Wir verwenden das zufällige Punktrauschen zwei D und übergeben X und Y und addieren dann die Zahl zu unseren X- und Y-Positionen Grafik ändert sich nichts wirklich der Grafik ändert sich nichts wirklich, da N eine sehr kleine Zahl ist. Aber wir können das ändern, indem wir den letzten Parameter der Funktion Noise to D verwenden, nämlich die Amplitude. Lassen Sie uns Variablen für diese beiden Parameter deklarieren, die ich als eins belassen werde, und die Amplitude, die ich auf dint setzen werde Jetzt können wir sehen, was das Geräusch macht, aber das sieht immer noch nach Zufallszahlen aus, weil die Frequenz zu hoch ist Ich werde es auf eine winzige Zahl wie 0002 ändern. Jetzt sieht es immer noch ziemlich zufällig aus, aber es fließt viel besser Einige davon sehen sogar wie Kurven aus, aber wenn wir die Punkte ausblenden, können wir sehen, dass es sich immer noch nur um gerade Linien handelt. Hier gibt es also noch ein bisschen mehr zu tun. Das wird dem, was wir in der vorherigen Lektion gemacht haben, sehr ähnlich sein . Die innere Schleife wird bei Colts Mines One enden. Dann wollen wir statt eines Punkts eine Kurve bilden, was der aktuelle Punkt ist, und wir wollen erreichen, indem wir dem Index Null hinzufügen Im Gegensatz zum nächsten Punkt duplizieren Sie einfach die Linie und ändern den Index um zwei plus eins Wir können die geraden Linien loswerden und der nächste Teil ist so ziemlich identisch mit dem, und der nächste Teil ist so ziemlich identisch mit dem was wir beim Kurven-Intro gemacht haben, also können wir schummeln und ihn von dort kopieren können den Teil des Befehls löschen und wir müssen nur den Iterator von I auf C ändern und die Punktlänge der Punkte auf Aufrufe ändern Und da ist unser Kurvenraster. Raster sind hochwertig und werden oft als Grundlage für Dinge verwendet , die wir mit Code erstellen möchten Es war gut für uns , uns die Zeit zu nehmen , um zu lernen, wie man ein dynamisches Grid erstellt In der nächsten Lektion werden wir damit kreativer umgehen. 33. Lerne, Segmente zu erstellen: Im Moment haben wir eine Kurve pro Zeile des Rasters. Stattdessen möchte ich kleine Kurvensegmente. Für jede Spalte können wir das tun, indem wir den Startpfadbefehl und den Strichbefehl innerhalb der Schleife verschieben den Startpfadbefehl . Ich weiß, dass wir diese Zeilen erst am Ende der vorherigen Lektion geschrieben haben, aber wir werden sie bereits ändern. Für diesen nächsten Schritt Sie sie gerne kommentieren oder löschen. Wir wollen nur die letzte Zeile ohne se am Anfang. Das Ergebnis ist interessant, aber es ist nicht das, wonach ich suche. Ich möchte immer noch das gesamte Segment, also müssen wir jeden Pfad am vorherigen Mittelpunkt beginnen Wir müssen es in einer Variablen speichern, sodass die verschiedenen Werte nach jeder Iteration der Schleife bestehen bleiben Deklarieren wir zwei neue Variablen namens last X und last Y. Vor der Kurve verschieben wir das letzte X und das letzte Y, und am Ende der Iteration setzen wir das letzte X auf x und das letzte Y auf Y. Das ist fast soweit. Vor der Kurve verschieben wir das letzte X und das letzte Y, und am Ende der Iteration setzen wir das letzte X auf x und das letzte Y auf Y. Das ist fast soweit. Jetzt beginnen die Kurven dort, wo die letzte Wir müssen uns nur mit einer Ausnahme für den ersten Punkt jeder Spalte befassen . Wenn C Null ist, ist das letzte X der Schnittpunkt X und das letzte Y der Schnitt Y. Jetzt sehen wir wieder die vollständigen Kurven, aber diesmal zeichnen wir sie in Segmenten, was bedeutet, dass wir jedem Segment Supert-Eigenschaften geben können und wir diese Eigenschaften direkt auf dem Punkt installieren können direkt Hier oben werden wir das Punkte-Array auffüllen . Wir können eine neue Variable namens Linienbreite deklarieren und sie vorerst auf eine beliebige Zahl setzen Sagen wir zehn, übergeben sie an den Punktkonstruktor und scrollen dann nach unten zur Punktklasse Stellen Sie sicher, dass Sie die neue Eigenschaft als Zahlenvariable speichern wobei diese Punktlinienbreite der Linienbreite entspricht Zurück zur Renderfunktion können wir die Linienbreite des Kontextes so einstellen, dass sie der Linienbreite Kurvenpunkts entspricht Noch nicht viel, aber wir wissen, dass wir die Linie variieren und sie auf dem zuvor berechneten Geräuschwert basieren können die Linie variieren und sie auf dem zuvor berechneten Geräuschwert basieren dem zuvor berechneten Geräuschwert Wir wissen, dass N eine Zahl ist , die innerhalb der Amplitude variiert, oder dass sie tatsächlich zwischen negativer Amplitude und positiver Amplitude variiert . So können wir das einem anderen Bereich für unsere Linienbreite zuordnen. Zuordnung eines Wertebereichs zu einem anderen ist eine sehr häufige Operation, und auch hier können wir uns darauf verlassen, dass uns Canvas Sketch UTL dabei hilft Kartenbereich ist Teil des Mathematikmoduls, daher müssen wir ihn zuerst importieren Für die Kostenberechnung ist Canvas Sketch TL Mathe erforderlich. Die Linienbreite wird Math Dot Map Branch sein. Der Wert ist N und der Eingabebereich reicht von Minus-Amplitude zu Amplitude, und der Ausgabebereich kann zwischen 2 und 20 Das sieht langsam interessant aus. Wir können mehr Eigenschaften wie die Farbe ändern. Ich zeige Ihnen eine weitere Farbbibliothek die sich von der unterscheidet, die wir in der vorherigen Lektion verwendet haben namens Farbkarte, die sich von der unterscheidet, die wir in der vorherigen Lektion verwendet haben. Es hat eine Reihe von Farbpaletten, die nützlich sind, um eine Reihe von Werten zu visualisieren, was für uns sehr gut geeignet ist. Also lass es uns installieren im Online-Editor Gehen Sie im Online-Editor zu den Abhängigkeiten und geben Sie Color Map ein. Beenden Sie den Vorgang auf dem Terminal mit Control C oder Command C und geben Sie NPM I Color Map Sie nach Abschluss der Installation die Pfeiltaste nach oben, entfernen Sie den Dash open und das neue Führen Sie die Skizze erneut aus. Wir müssen die Bibliothek in unseren Code unterteilen. Also Const-Farbkarte, Farbkarte erforderlich. Jetzt kehren wir zur Colormap-Seite zurück und schauen uns das Anwendungsbeispiel an. Wir werden dem folgen und die Farben in den Variablen speichern Farben entsprechen der Farbkarte und öffnen dann coole Klammern , um die Eigenschaften festzulegen. Die erste wird, wie wir im Beispiel sehen , auch als Farbkarte bezeichnet. Und es ist der Name der Palette, die wir aus dieser Liste auswählen können. Ich werde MA GMA wählen. Dann für die Anzahl der Farbstufen, die wir verwenden, und die Farbtöne, was in unserem Fall die Amplitude sein wird Um dies in Aktion zu sehen, erstellen wir eine neue variable gekühlte Farbe und machen das Gleiche, was wir für die Linie mit ihr gemacht haben übergeben sie an den Punktkonstruktor und speichern sie als Zahlenvariable in der Punktklasse In der Render-Funktion setzen wir den Kontext-Punktstrichstil auf die C-Punktfarbe Um nun eine Farbe aus der Liste auszuwählen, können wir wieder den MAP-Bereich verwenden, sodass Farbe den Farben entspricht Eckige Klammern ergeben eine Punktzuweisung aus Verzweigung und negativer Amplitude zu positiver Amplitude und dann Null zu Amplitude Der Unterschied besteht darin, dass wir diese Zahl als Index für das Farbarray verwenden, was bedeutet, dass es sich um eine Ganzzahl handeln muss. Also müssen wir es mit dem mathematischen Punktboden umschließen. Mal sehen, wie das mit mehr Zeilen aussieht. Sagen wir 48, das ist nicht schlecht, aber wir können mit dem Sketch weiterspielen. Natürlich können wir eine andere Farbpalette ausprobieren. Mal sehen, wie das mit dem Salzgehalt aussieht, aber das ist nicht das einzige Merkmal, mit dem wir spielen können Da wir ein System geschaffen haben, können wir einfach mit Werten experimentieren Was ist zum Beispiel passiert, wenn wir diesen Wert mit Null Punkt acht statt 0,5 oder diesen mit 5,5 multiplizieren ? Okay, es ist chaotisch, aber was könnten wir noch versuchen? Was ist, wenn wir Zahlen zum letzten X addieren und sagen wir 250 oder subtrahieren 250, wenn es nicht immer 250 ist, sondern eine Wertsteigerung in Abhängigkeit von C und vielleicht dasselbe für das letzte Y tun. Verwenden Sie Zeilen, um die Linien vielleicht dünner zu machen, wobei der Ausgabebereich zwischen Und wie würde das mit mehr Spalten aussehen? Sagen wir 72 und weniger Zeilen. Okay, das ist nett. Ich mag es. Hier in der Bildschirmaufnahme könnte es so aussehen, als ob ich direkt zu diesem Ergebnis gegangen bin. Aber als ich das Material für den Kurs vorbereitete, hatte ich kein klares Ziel. Ich experimentiere einfach mit den Werten bis ich etwas gefunden habe, das mir gefällt Und das ist Teil des Prozesses. Sobald Sie die Logik geschrieben haben, können wir kreativ damit umgehen und auch damit experimentieren. Ich bin gespannt , welche Variationen du dir einfallen lassen wirst. Und in der nächsten Lektion werden wir Rauschen verwenden , um unsere Kurven zu animieren 34. Rasteranimation erstellen: Das wird kurz sein. Ich werde dir zeigen , wie man das Raster animiert und wie man die Animation als Video exportiert Sie erinnern sich vielleicht aus unserer ersten Lektion über Canvas Sketch, dass wir der Einstellung eine Eigenschaft namens animate hinzufügen und sie auf true setzen können der Einstellung eine Eigenschaft namens animate hinzufügen und sie auf true setzen Dadurch wird die Renderfunktion immer wieder aufgerufen , wenn der Browser bereit ist, den Bildschirm neu zu malen Wir können das verwenden, um Werte im Laufe der Zeit zu ändern, und wir werden die Position unserer Punkte Wir können also nach unten zur Punktklasse scrollen und die Anfangsbuchstaben X und Y sowie X und Y speichern . Anstatt die Position des Punkts nur einmal am Anfang festzulegen , können wir diese Zeilen kopieren, um sie in der Renderfunktion zu verwenden Und wenn wir diese beiden herauskommen, starten wir zuerst eine neue Schleife mit jeweils einem Punkt Dann können wir diese Zeile hier einfügen. Und statt nur X und Y verwenden wir den Punktpunkt x, der dem Punkt Ix entspricht, was dem Anfangsbuchstaben X plus N entspricht, und dasselbe gilt für Punkt Y. N wird auch Punkt X und Punkt IY verwenden Das wird nicht viel bewirken, weil die Werte für jeden Frame gleich sind Wir benötigen also Variablen , die sich im Laufe der Zeit ändern, und das haben wir bereits in einer früheren Lektion gesehen. Wir haben Zugriff auf eine namens Frame. Jetzt müssen wir nur noch ein Bild zu X oder Y hinzufügen . Ich werde es zu X hinzufügen. Es bewegt sich etwas langsam, sodass wir es beschleunigen und Bild mit drei multiplizieren können. Es bewegt sich etwas langsam, sodass wir es beschleunigen und Bild mit drei multiplizieren können es beschleunigen und Bild mit drei multiplizieren Wenn dir das gefällt, kannst du auf den Browser klicken und oder Command S drücken, um ein paar Frames zu speichern Vielleicht möchtest du das aber auch als Emason speichern. Lassen Sie mich Ihnen zeigen, wie das geht. Dies funktioniert nur mit dem Offline-Setup, da wir FFMPH benötigen und Zugriff auf das lokale Dateisystem Also zuerst müssen wir FFMPH installieren und wir können diese Zeile aus der Dokumentation kopieren diese Zeile aus der Dokumentation oder sie einfach selbst eingeben NPM, ich bei FPH habe FFmphg installiert. Wir verwenden G, was bedeutet, dass wir Sobald die Installation abgeschlossen ist, werden wir Canvas Sketch, Sketch Curves erneut ausführen. Aber dieses Mal müssen wir den Strichstrich als Ausgabe den Ausgabekurven anhängen . Das ist der Ordner, in den die exportierte Datei verschoben werden soll, und wir müssen auch den Dash Stream anhängen Wenn dieser Sketch mit einem Dash Stream läuft, können wir Strg Shift S drücken, um den Rekorder und die Animation zu starten, und dann dieselbe Strg Shift S erneut drücken , um die Aufnahme zu beenden In den Skizzen und Ausgabekurven sehen wir nun eine MP Four-Datei mit unserer Animation In der Dokumentation finden Sie auch weitere Informationen zum Exportieren von Animationen, einschließlich Bildsequenzen und Geschenken Also mach weiter und experimentiere mit dem, was wir bisher gesehen haben. Ich freue mich darauf, deine Animationen in der Projektklasse zu sehen . In dieser Lektion ging es um Kurven, aber wir haben auch etwas über die Interaktion mit dem Mauszeiger, dynamische Raster und das Importieren animierter Skizzen gelernt dynamische Raster und das Importieren animierter Skizzen Und in der nächsten Lektion werden wir uns Audiovisualisierung befassen 35. Erstelle Drückenspiel: Audiovisualisierung geht es darum, Daten aus einer Audioquelle zu extrahieren und verwenden, um etwas Visuelles Wir beginnen einfach mit einem Kreis, der uns einer Audioquelle entsprechend zieht Dies ist eine einfache Skizze, und wir werden sie von Grund auf neu erstellen Aber es stecken ein paar Konzepte dahinter, die wir zuerst durchgehen müssen. Und wir beginnen damit, wie man Musik im Webbrowser abspielt. Lass uns eine neue Skizze beginnen. Sie kennen die Vorgehensweise inzwischen Wenn Sie einen Online-Editor verwenden, erstellen Sie einfach eine neue Kopie der Vorlage und fertig. Wenn Sie das Terminal verwenden, drücken Sie C, wenn ein anderer Sketch ausgeführt wird, und dann Canvas-Sketch, Sketch Audios Nu Ändern Sie die Abmessungen auf 1080 mal 1080. Um etwas Audio abzuspielen, benötigen wir mindestens drei Codezeilen. Zuerst müssen wir ein HTML-Audioelement erstellen. Wir können es in einer Variablen namens audio speichern und es mit einem Dokument mit einem Punkt beenden, an dem das Element Audio beendet wird. Es muss nicht zum Hauptteil des Dokuments hinzugefügt werden. Ich musste nur als Entität existieren. Dann müssen wir ihr eine Quelle geben, bei der die Audio-Punktquelle gleich ist, und dann den Übergang zu einer Audiodatei, die wir in einer Minute sehen werden . Und die dritte Zeile ist ein Aufruf Audio Dot Pla für die Audiodatei Wenn Sie Musik haben, speichern Sie sie auf Ihrem Computer, Sie können sie verwenden. Es gibt nur wenige unterstützte Dateiformate , darunter das sehr beliebte P Three. Wenn Sie also MP Three-Dateien haben, sollten diese hier funktionieren. Wenn Sie keine haben oder lieber eine Demo-Datei herunterladen möchten, kann ich artlest dot empfehlen, wo Sie lizenzfreie Musik herunterladen können Die Dateien können kostenlos heruntergeladen werden, aber wenn Sie keine Lizenz haben, werden sie mit einem Audio-Wasserzeichen geliefert, was in unserem Fall in Ordnung ist, da wir daran interessiert sind , die Technik hier zu erlernen. Wir können die Dateien später jederzeit austauschen Sobald Sie die Datei heruntergeladen haben, empfehle ich, sie in Ihren Sketch-Ordner zu In meinem Fall werde ich einen Unterordner namens Audio erstellen und dann die MP Three-Datei darin einfügen Dies dient dazu, unsere Dateien zu organisieren, aber auch, um es einfach zu machen, in unserem Code auf sie zu verweisen Zum Beispiel kann ich jetzt zu der Zeile zurückkehren , die ich zuvor eingegeben habe, und Audio Dot Source entspricht Audio Slash und dann den Namen der Datei eingeben Audio Dot Source entspricht Audio Slash und dann den Namen der Datei Wenn Sie einen Online-Editor verwenden, müssen Sie eine URL eingeben, öffentlich gehostete P3-Datei verweisen muss Auch hier können Sie einen von artlest DoTo verwenden , und dieser ist ziemlich lang, bis Sie Aber ich werde es in der Notiz unter dem Video zur Verfügung stellen. Wenn Sie eine Skizze speichern, stellen Sie fest, dass das Audio noch nicht abgespielt wird Das liegt an der Autoplay-Richtlinie Wir können dem Audioobjekt eine Eigenschaft namens autoplay hinzufügen und sie auf true setzen Dies garantiert jedoch immer noch nicht, dass das Audio abgespielt wird , und das aus gutem Grund , der auf dieser Seite ausführlich erklärt wird Kurz gesagt, wir möchten nicht, dass Webseiten plötzlich Geräusche machen, wann immer sie wollen Aus diesem Grund ist die automatische Audiowiedergabe standardmäßig blockiert Diese Zeile hier reicht also eigentlich nicht aus, um mit der Audiowiedergabe zu beginnen. Abhängig von Ihrer Konfiguration wurde das Audio möglicherweise tatsächlich abgespielt , weil die URL, die Sie verwenden, vom Browser als zulässige URL aufgeführt wurde . Aber das ist nicht jedes Mal garantiert. Wir benötigen zumindest eine Art Benutzerinteraktion mit der Seite als eine Art Absichtserklärung. Im Wesentlichen reicht es aus, einfach auf eine beliebige Stelle auf der Seite zu klicken. Wir brauchen also einen Maus-Event-Listener. Lassen Sie uns eine Funktion namens Ed Listeners erstellen. Wir sind daran interessiert, auf eine beliebige Stelle im Fenster zu klicken, also fügt das Fenster einen Event-Listener hinzu, und der Ereignistyp kann sein, wenn die Maustaste losgelassen wird, die Maus hoch, die Handle-Funktion kann als Funktion bezeichnet werden, wie wir sie in der vorherigen Liste verwendet haben , und es kann eine anonyme Inline-Funktion wie diese handeln Jetzt können wir darin endlich Audio Dot Play aufrufen. Wir können diese beiden Zeilen von hier oben entfernen und die Audioeigenschaft auch für die gesamte Skizze sichtbar machen , indem sie hier oben deklarieren, anstatt innerhalb der Funktion Jetzt müssen wir nur noch irgendwo den Hörer ankrähen, und ich werde das am Ende der Zeile machen , kurz vor Canvas Sketch Speichern Sie dann die Seite und klicken Sie auf eine beliebige Stelle. Und da wir jetzt eine gewisse Kontrolle haben, können wir dies in einen Schalter umwandeln, indem wir sagen, ob das Audio gestellt ist, rufen Sie Play auf oder rufen Sie Audio Dot Post Jetzt können wir klicken, um abzuspielen, und erneut klicken, um zu pausieren. Das brauchen wir, wenn wir nur Audio abspielen wollen, aber Audiodaten lesen wollen, damit wir sie visualisieren können. Das werden wir in der nächsten Lektion sehen. 36. Einen Analyzer erstellen: Wir wollen eine Audioquelle visualisieren. Wir benötigen die Audiodaten und dafür benötigen wir die Web-Audio-API. Die Web-Audio-API hat mindestens ein Konzept mit dem Compass IPI gemeinsam, nämlich dass sie auch einen Kontext hat Wir haben unseren Render-Two-D-Kontext verwendet, um die gesamte Drohne zu erstellen, und wir werden für alles, was mit dem Sound zu tun hat, einen Audiokontext benötigen funktioniert es mit Wie wir auf dieser Grafik sehen können, funktioniert es mit Knoten. Innerhalb des Kontextes werden wir einen Eingang oder eine Quelle haben, z. B. ein Audioelement mit einer MP-Datei, und wir werden es mit dem Ziel verbinden , das normalerweise der Lautsprecher des Systems ist . Und dazwischen können wir mehrere andere Knoten verbinden, die wir hier nicht näher eingehen werden. Die Web-Audio-API ist sehr umfangreich und wir könnten einen ganzen Kurs darüber machen. Wir werden uns auf einen Knoten namens Analyzer konzentrieren , den wir benötigen, um Daten aus einer Audioquelle zu extrahieren. Zurück zu unserer Skizze, wir müssen einen Audiokontext erstellen. Um für Ordnung zu sorgen, können wir eine neue Funktion namens ret audio schreiben und diese Zeilen darin verschieben Wir werden ein paar neue Variablen benötigen , die wir hier oben global deklarieren können Lassen Sie den Audiokontext, den Audiodatenquellenknoten und den Analyzer-Knoten stehen. zurück in die Funktion, gehen Sie zum Audiokontext, was einem neuen Audiokontext entspricht. Dann benötigen wir für unseren ersten Knoten einen Eingang oder die Audioquelle. Dies wird der Quellknoten sein, der der Audiokontext-Punkt-Create-Medienelementquelle entspricht . Und hier übergeben wir die Audioelemente, die wir erstellt haben. Die Quelle wird also unsere MP-Three-Datei sein, und wir müssen sie mit dem Audiokontext-Ziel verbinden , dem Speak. Jetzt ist es Zeit für den Analyzer-Knoten , der Audiocontext dot create Analyzer ist, und dann müssen wir auch den Quellknoten mit dem Analyzer-Knoten verbinden den Quellknoten mit dem Analyzer-Knoten Wir müssen den Analyzer nicht mit dem Ziel verbinden, da die Quelle bereits mit dem Ziel verbunden ist Dann benötigen wir ein Array zum Speichern der Audiodaten und es muss als Array eingegeben werden Genauer gesagt ein Float-32-Array. Wir müssen die Länge angeben und können die Eigenschaft des Analyzer-Knotens namens frequency been count verwenden . Wenn Sie an dieser Eigenschaft interessiert sind, können wir auf der MDN-Seite danach suchen Die Anzahl der Frequenz-Beans ist eine schreibgeschützte Eigenschaft der Analyzer-Node-Schnittstelle Dies entspricht im Allgemeinen der Anzahl der Datenwerte, mit denen wir für die Visualisierung spielen können, was genau das ist, was wir benötigen Das ist es für die Audiofunktion zum Beenden, aber von wo aus rufen wir sie Der Audiokontext unterliegt ebenfalls denselben Regeln wie das Autoplay Wir können es sogar außerhalb der Benutzerinteraktion erstellen, aber dann blieb es in einem angehaltenen Zustand , der sich nur bei einigen Benutzerinteraktionen ändern könnte bei einigen Benutzerinteraktionen ändern Es ist also besser, es bereits in einem Interaktionshandler zu erstellen , wie zum Beispiel in unserer Maus-App-Funktion hier, aber wir müssen das nur einmal tun. Nicht jedes Mal, wenn ein Mausklick erfolgt, können wir vor dieser Zeile eine Bedingung hinzufügen besagt, dass Audio nur dann beendet werden muss, wenn kein Audiokontext vorhanden ist. Beim ersten Mausklick wird die Eigenschaft Audiokontext undefiniert sein Dann werden wir im Inneren erstellt, Audio wird beendet. Und bei jedem weiteren Mausklick wird das einen Wert haben und die Bedingung wird falsch sein. Der Ton wird immer noch wie zuvor abgespielt. Und jetzt lass uns etwas zeichnen. Dies wird eine animierte Skizze sein. Fügen Sie also animiertes True zur Einstellung hinzu. Dann müssen wir in der Render-Funktion die Audiodaten aus dem Analyzer-Knoten in jedem Frame mit dem Analyzer-Knotenpunkt Get Float-Frequenzdaten lesen Analyzer-Knoten in jedem Frame mit dem Analyzer-Knotenpunkt Get Float-Frequenzdaten und sie in unser Audiodatenarray übergeben. Wenn wir versuchen, dies jetzt auszuführen, wird in der Konsole ein Fehler angezeigt, der besagt, dass die Cantad-Eigenschaften definiert liegt daran, dass der Analyzer-Knoten erst erstellt wird, wenn ein Klick erfolgt Wir müssen das also berücksichtigen und alles , was mit dem Audiokontext zu tun hat, überspringen , bis er erstellt ist. Eine einfache Bedingung, die ich machen würde , wenn es keinen Audiokontext gibt, zurückkehren. Schauen wir uns nun die Daten an. Lassen Sie uns zunächst sehen, wie groß dieses Array ist. Wir können hier in Quit Audio ein kurzes Konsolenprotokoll hinzufügen und die Länge der Audiodaten überprüfen, was der Anzahl der Frequenzen entspricht. Wir können auf eine beliebige Stelle klicken und sehen, dass es 1024 ist. Falls eine andere Nummer für Sie angezeigt wurde, brauchen Sie sich keine Sorgen zu machen. Was wir wollen, ist ein Durchschnitt all dieser Werte in den Audiodaten. Es sind alles numerische Werte, also müssen wir sie nur addieren und die Summe durch die Anzahl der Werte dividieren. Lassen Sie uns dafür eine Funktion namens get average erstellen. Sie nimmt einen Parameter namens Data auf, dem wir wissen, dass es sich um ein Array von Werten handeln wird. Dann benötigen wir eine Variable namens sum, die bei Null beginnt, und dann geben wir für jedes Element innerhalb der Daten Summe plus gleiche Eckige Klammern I an. Wenn die Schleife beendet ist, können wir den Durchschnitt zurückgeben, das ist die Summe geteilt durch die Datenpunktlänge. Jetzt können wir in der Render-Funktion, nachdem wir die Frequenzen aus dem Analyzer-Knoten extrahiert haben, die Frequenzen aus dem Analyzer-Knoten extrahiert haben, den Durchschnitt in einer Variablen namens AVG speichern Dies entspricht Get Average und Pass im Audiodatenarray. Mit diesem Wert können wir nun endlich unseren Kreis zeichnen. Wir beginnen mit Context Dot Save und Context Dot Restore. Dann übersetzen wir den Kontext in die Mitte der Leinwand. Und setze die Linie damit auf zehn. Dann wird für die Form der Kontextpunkt Pfad beginnen, Kontextpunkt Bogen, der in der Mitte bei 00 beginnt, und der Radius wird AVG sein. Da AVG jedoch eine negative Zahl sein kann, müssen wir dies mit einem mathematischen Punkt aBS , der uns den absoluten Wert ohne die Seite gibt. Es wandelt also eine negative Zahl in eine positive Zahl um und den Startwinkel Null und den Endwinkel den mathematischen Punkt Pi mal zwei und schließlich den Kontext-Punktstrich. gibt es ein paar Dinge zu verbessern Hier gibt es ein paar Dinge zu verbessern, die wir untersuchen werden . Am offensichtlichsten ist, dass wir die Skizze nicht posten, wenn wir das Audio posten. Um den Wiedergabestatus der Skizze kontrollieren zu können, benötigen wir Zugriff auf den sogenannten Sketch-Manager. Es gibt ein Beispiel dafür, wie man es hier hinbekommt, und wir können sofort sehen, dass es an einer Synchronisation und einem Gewicht liegt. Wir haben vor allen vorherigen Lektionen einen Blick darauf geworfen und ich habe erwähnt, dass sie sich als nützlich erweisen würden, und genau hier brauchen wir sie. Anstatt das Beispiel einfach zu kopieren, schreiben wir es selbst. Wir beginnen damit, eine globale Variable namens manager zu deklarieren, und dann müssen wir diese beiden Aufrufe in eine Sync-Funktion bringen , die ich Start nenne Der Aufruf von Canvas ist Sketch einen Verweis auf den Sketch-Manager zurück , gibt einen Verweis auf den Sketch-Manager zurück , den wir in unserer Manager-Variablen speichern werden, und wir müssen die Gewichtung für diesen Aufruf vorbereiten Das ist eine Synchronisationsfunktion. Sobald wir den Manager haben, können wir die Skizze bereits im entgegengesetzten Zustand mit der Punktstellung des Managers beginnen , und wir werden die Skizze erst abspielen , wenn das Audio abgespielt wird Wir können das in unserem Mouse-Up-Handler steuern und hier ein paar Zeilen hinzufügen. Niedriges Audio-Punktspiel, wir fügen Manager Dot Play hinzu. Unter der Audio-Punkt-Pose fügen wir die Manager-Punkt-Pose hinzu. Es passiert noch nichts, weil wir vergessen haben, unsere Startfunktion aufzurufen. Also lass uns das machen. Jetzt heißt es abspielen, wenn wir klicken, und Pause, wenn wir klicken. Das ist ein guter Anfang. In der nächsten Lektion werden wir etwas tiefer gehen. 37. So erzeugst du Frequenzen: Wir sind an diesem Punkt angelangt, ohne einen Schlüsselbegriff für die Audioanalyse zu nennen . Es ist FFT. FFT steht für Fast Fourier Transform und ist ein Algorithmus, der ein kontinuierliches Signal wie eine Schallwelle in eine Komponente mit unterschiedlichen Frequenzen umwandelt wie eine Schallwelle in eine Komponente mit unterschiedlichen Frequenzen Dies ist die Hauptfunktion des Analysatorknotens, und wir können die FFT-Größe ändern, um mehr oder weniger Daten zu lesen und mehr oder weniger dieser Komponenten zurückzugeben Der Standardwert ist 2048 und der Grund dafür, dass die Frequenz gezählt wird , ist 1024, weil es immer die Hälfte der FFT-Größe Wenn wir weniger Bohnen wollen, können wir die FFT-Größe auf 512 setzen Zum Beispiel muss dieser Wert immer eine Zweierpotenz sein. Schauen wir uns nun an, was sich im Audiodatenarray befindet. In jedem Frame werden viele Daten gesperrt. Also werde ich die Skizze unterbrechen und mir eine davon ansehen. Es gibt jetzt 256 Vallos. Und wenn wir uns die ersten hundert ansehen, können wir uns ein Bild von der Reichweite dieser Vals Wir können sehen, dass sie alle unter Null liegen. Warum ist das so? Um das zu verstehen, müssen wir uns den Analysatorknoten genauer ansehen, ausgehend von den G-Float-Frequenzdaten. Jedes Element im Array steht für einen Schülerwert für eine bestimmte Frequenz Der Wert, den wir hier sehen, ist also undisziplinär. Wir können uns einen Überblick über den Bereich dieses Wertes verschaffen , wenn wir eine Seite zurückgehen und diese anderen Eigenschaften des Analyzer-Knotens überprüfen des Der Mensch ist ein Schüler und der größte Schüler. Das Standard-Minimum ist -100 und das Standard-Maximum ist -30 Diese Eigenschaften beziehen sich eine andere Methode namens get byte frequency data, die den Wert in Byte zurückgibt, die diesem Bereich zugeordnet sind. Wir verwenden jedoch Get-Float-Frequenzdaten, die sich diese Minimal- und Maximalwerte nicht auswirken, wir können sie aber trotzdem als Richtlinie verwenden Wir können Werte ungefähr zwischen -100 und -30 erwarten. Und deshalb sind alle Zahlen, die wir sehen, negativ. Das ist auch der Grund, warum der Kreis beim Ausführen einer Skizze immer kleiner zu werden scheint, wenn ein lautes Geräusch zu hören ist , weil die absolute Zahl kleiner wird Es ist besser für uns, diesen Wert einem einfacher zu verwendenden Wert zuzuordnen, z. B. einem Bereich Auch hier können wir uns auf Canvas Sketch UTL verlassen und die Kartenbereichsfunktion aus dem mathematischen Modell verwenden Im Offline-Modus haben wir es bereits installiert. Im Online-Editor müssen Sie es als Abhängigkeit für jede Skizze erneut deaktivieren, und Sie wissen bereits, wie das geht. Geben Sie einfach Canvas sketch Util in das Abhängigkeitsfeld ein und fordern Sie es dann mit math require Cv sketch, Util Jetzt können wir eine zugeordnete Variable erstellen und sie Math Dot Maprench AVG zuweisen Von Minimum Discib und Maximum Discib bis Null und Eins. Und in diesem Fall wollen wir, dass der letzte Parameter wahr ist, weil wir diese Werte auf 0-1 beschränken wollen Und der Radius unseres Kreises wird jetzt mit 200 multipliziert. Der Kreis wird jetzt immer größer, wenn das Geräusch lauter ist, aber die meiste Zeit sehen wir den Kreis überhaupt nicht Also, was passiert hier? Lassen Sie uns den Wert von Map protokollieren, um das herauszufinden. Er scheint die meiste Zeit Null zu sein. Wir müssen die Audiodaten erneut überprüfen. Die meisten dieser Werte sind tatsächlich so niedrig, dass sie praktisch geräuschlos sind. Sie senken unseren Durchschnitt und wir sehen nicht einmal den Kreis, auch wenn wir die Musik immer noch hören können. Der Durchschnitt ist also eigentlich nicht sehr nützlich für die Visualisierung. Wir können weitere nützliche Werte finden , die näher am Anfang des Arrays wenn wir den Durchschnitt durch einen einzelnen Wert, sagen wir Index 12, austauschen. Dann ist der Kreis zurück. größte Teil der Energie konzentriert sich am Anfang des Audiodatenarrays. Und um zu erklären , warum das so ist, bräuchten wir eine viel längere Lektion. Aber lassen Sie mich Ihnen eine kurze Version geben. Ich habe hier eine weitere Skizze, die eine Frequenzstrahlzahl von 32 statt 256 zeigt . Jeder Strahl wird durch einen senkrechten Balken dargestellt , und die Höhe des Balkens entspricht einem Wert , der der halben Höhe der Leinwand entspricht Auf der linken Seite haben wir die niedrigen Frequenzen, beginnend bei Null Hertz, und auf der rechten Seite die Hochfrequenz bis etwa 22.000 Hertz, was in etwa dem menschlichen Hörbereich entspricht Das Intervall zwischen Niederfrequenzknoten auf einer Skala ist viel kleiner als bei Hochfrequenzknoten Die Knoten haben einen logarithmischen Raum, und die FFT-Biegungen haben lineare Abstände Wenn wir die Frequenzdaten vom Analysatorknoten erhalten, erhalten wir viele niedrige Frequenzen, die in wenigen Bindungen zusammengefasst sind, während höhere Frequenzen auf während höhere Frequenzen Diese Seite der Karte wird also tendenziell immer höhere Werte haben Hier gibt es mehr Details, die ich weglasse, aber ich hoffe, ich helfe, ein wenig von den Daten, mit denen wir es zu tun haben, zu verstehen. Und jetzt können wir zu unserer Skizze zurückkehren. Wir entwickeln kein Tool zur Anzeige präziser Audiodaten. Wir können nach eigenem Ermessen Werte auswählen , die gut aussehen. Wie wir es hier mit diesem Index 12 gemacht haben, würde ich sagen, machen wir dasselbe mit ein paar weiteren Werten. Lassen Sie uns ein Array namens Beans beenden es mit drei Werten initialisieren Ich werde vier, 12 und 37 verwenden. Dann können wir innerhalb der Render-Funktion eine Schleife von Null bis Bin Dot Link beenden. Verschiebe den gesamten Code in die Schleife. Wir können den Durchschnitt loswerden und eine neue Variable namens Ben erstellen, die aus eckigen Klammern I besteht. Dann verwenden wir in MA Branch eckige Klammern Ben für Audiodaten und vergrößern den Radius etwas, erhöhen ihn auf 300 Was sind im Moment die tatsächlichen Frequenzen, wir hier visualisieren Ich weiß es eigentlich nicht. Müssen wir das wissen? Ich glaube nicht. Wie ich schon sagte, wir sind hinter etwas her, von dem wir denken , dass es gut aussieht. Und es steht uns frei, alle Teile der Audiodaten auszuwählen , die zu uns passen. 412 und 37 sind nur zufällige Zahlen und wir wählen aus. Fühlen Sie sich frei, eine beliebige Zahl zu wählen und zu sehen , wie diese aussieht. Wenn Sie der Meinung sind, dass die Kreise zu sprunghaft sind, können Sie die Glättungskonstante ändern Ausgehend von seinem Standardwert , der 0,8 ist, auf einen höheren Wert, versuche ich 0,9 Jetzt wissen wir etwas mehr über die Daten, die wir verwenden, es ist an der Zeit, den Fokus in der nächsten Lektion auf die visuellen Elemente zu verlagern in der nächsten Lektion auf die visuellen Elemente 38. Lerne, Bogen-Audio zu erstellen: Mit dem Analyzer-Knoten erhalten wir, dass all diese Werte die verschiedenen Frequenzen der Audioquelle repräsentieren die verschiedenen Frequenzen der Audioquelle Sie ändern sich im Laufe der Zeit, was sich hervorragend für Animationen eignet. Was noch zu tun ist, einige interessante Formen zu zeichnen , die zu ihnen passen. Eines der Dinge, die ich gerne mache, um mich inspirieren zu lassen, ist das Stöbern auf klassischen Postern. Ich stelle mir gerne vor, wie sie aussehen würden , wenn sie Audioreaktoren wären. Diese Serie von Jessica Swenson passt sehr gut dazu. In dieser Lektion werden wir versuchen, diesen zu rekrutieren. Sie können sehen, dass es eine Reihe konstanter Kreise gibt , die mehr oder weniger organisiert aufgeteilt sind Je größer der Kreis, desto dicker die Bögen. So bekommen wir ein Gefühl von Tiefe. Auch wenn wir nur ziemlich einfache zwei D-Formen haben. Zurück zu unserer Skizze. Ich kann damit beginnen, ein paar variable Zahlenkreise zu deklarieren, die ich auf fünf setzen werde, und Num Scheiben, die auf neun gesetzt werden Der Wert jeder Schicht und der Strahlkraft ergibt die mathematische Zahl Pi mal zwei, was dem vollen Kreis geteilt durch die Anzahl der Schichten entspricht. Und dann wird der Basisradius unseres ersten Kreises 200 sein Ich möchte auch die Hintergrundfarbe auf Weiß wie EEA e Null ändern die Hintergrundfarbe auf . Wir können den Audioteil vorerst überspringen und diese Zeilen herausnehmen , um uns auf die Zeichnung zu konzentrieren. Wir benötigen zwei für Loop plus einen mit dem Buchstaben I, Loop und Wurf die Anzahl der Kreise. Und darin brauchen wir eine weitere Schleife mit dem Buchstaben G, Schleife und die Anzahl der Scheiben jedes Kreises. Wir können außerhalb dieser Schleifen verschieben, speichern und übersetzen , weil wir den Kontext nur einmal übersetzen müssen. Und dann können wir innerhalb der zweiten Schleife diese Linien verwenden, um unsere Bögen zu zeichnen Aber anstatt einen vollen Kreis von Null bis Pi mal zwei zu zeichnen , zeichnen wir einen Bogen von Null bis Scheibe Und wir können den Rest der alten Schleife loswerden. Wir brauchen es nicht mehr. Das zeichnet alle Bögen übereinander Wir müssen sie radial verschieben, indem wir den Kontext auf jeder Schicht drehen Wir benötigen also für jeden Kreis einen weiteren Block von Context Dot Save und Context Dot Restore Und für jedes Segment benötigen wir eine Kontext-Punktrotation. Slice Das ist besser, aber wir müssen den Kreis trotzdem entsprechend dem Radius verschieben. Wir könnten so etwas wie Radius plus I mal 50 machen, aber das wäre eine lineare Skala. Und wenn wir uns die Originalreferenz ansehen, können wir sehen, dass der Skalon definitiv nicht linear ist Ich weiß nicht genau, was die Skalierung hier vorantreibt, aber es sieht so aus, als ob die Bögen exponentiell wachsen, und das bringt mich zu einer weiteren sehr nützlichen Technik für kreatives Programmieren Diese werden normalerweise für Animationen verwendet, können aber auch für jeden beliebigen numerischen Wert verwendet werden Angenommen, Sie haben eine Skala von 0 bis 5 und teilen sie in Bei einer linearen Funktion sind alle Schritte gleich Bei Schritt eins wären wir also bei eins. Bei Schritt zwei wären wir bei zwei usw. Mit verschiedenen Funktionen wie dieser wären wir bei Schritt eins immer noch nahe Null Bei Schritt zwei, nur etwas weiter oben. Und dann, etwa bei Schritt drei und vier, würde der Wert schnell steigen. Einige dieser Funktionen sind bekannt und wurden von Robert Penn ausführlich dokumentiert Ich habe erwähnt, dass unsere Kreise exponentiell gewachsen sind, aber vielleicht ist das nicht der Fall Vielleicht wurden sie quadratisch oder kubisch oder vielleicht nach einer anderen Funktion gewachsen oder kubisch oder vielleicht , was hier Aber sicherlich wird eine davon für uns ausreichen , wie du es erwarten würdest, es gibt bereits Bibliotheken mit ESN-Funktion, die wir verwenden können, und die, die ich vorschlage, heißt Geben Sie im Online-Editor einfach ESS ein. im Abhängigkeitsfeld auf dem Terminal die Tasten Control C, PMI ESS Und wenn die Installation abgeschlossen ist, Canvas Sketch, Sketch Audio, um eine Skizze erneut auszuführen. Dann oben. Es entspricht Ess erforderlich. Und bevor wir es verwenden, schauen wir uns noch einmal unsere Referenz an Wir können sehen, wie die Bögen zusammen mit dem Radius wachsen. Wenn wir sagen, dass die Bögen Linien sind, dann variiert der Radius je nach Breite der Das heißt, wir können unsere Beschleunigungsfunktion verwenden , um die Linie entsprechend festzulegen und daraus einfach den Radius zu berechnen Lassen Sie uns also eine neue Variable namens linewid und damit eine neue Variablencodezeile Dann eine For-Schleife für jeden Kreis. Für die EM-Funktion benötigen wir eine Zahl 0-1, die ich in einer Variablen namens T speichern und sie auf zwei setzen werde einer Variablen namens T speichern und sie auf zwei setzen Ich dividiere durch numerische Kreise minus eine Zeile, wobei das ein Punkt ist und das T-fache des größtmöglichen Werts , den ich auf 100 setze und dann linewid in die Zeile schiebe, in der es Jetzt können wir unsere Zeile, die auf zehn gesetzt ist, durch Line damit ersetzen. I und Radius plus Kontakte Punktlinie damit. Das ist immer noch nicht ganz richtig. Das Problem ist , dass die Linien von der Mitte des Strichs aus gezogen werden . Wir benötigen nur die Hälfte der Linie für den Bogen und wir müssen den Radius um die gesamte Linienbreite verschieben können wir tun, indem wir den Radius in einer anderen Variablen anklicken, die ich C-Radius nennen werde Er wird zu Beginn jedes Frames auf den Basisradius gesetzt und dann um die aktuelle Linie erhöht, die sich auf jedem Kreis Und wir können den Bogen zeichnen, indem wir den Radius C plus die Breite der Kontaktpunktlinie mal 0,5 Jetzt haben wir eine perfekte Passform und es sieht so aus, als ob Expo eine extreme Wahl für eine Eason-Funktion war eine extreme Wahl für eine Eason-Funktion Also versuchen wir es mit Quag. Das sieht besser aus Mir ist auch aufgefallen, dass der erste Kreis fehlt , weil die kleinstmögliche Zeile mit ihm Null ist, also können wir hier einen Mindestwert haben und etwa 20 hinzufügen. Das sieht gut aus. Bringen wir jetzt die Audiodaten zurück. Im Moment haben wir ein Array für unsere Bohnen mit drei beliebigen Tellergrößen. Wir wollen eine Bohne pro Scheibe, also entfernen wir das. Erstellen Sie eine Variable namens bin, und wir benötigen eine neue für die Schleifeniteration über alle Kreise, die Zeit und alle Scheiben Dann kann der Bin-Index eine beliebige Zahl innerhalb eines bestimmten Bereichs sein beliebige Zahl innerhalb eines bestimmten Bereichs Wir haben so etwas gemacht, bevor wir das Zufallsmodell Chrom Canvas sketch TO verwendet das Zufallsmodell Chrom Canvas sketch TO Also lass uns das wieder benutzen. Wir müssen es zuerst benötigen. Und dann setze bin auf Random Dot Range Floor weil wir nur ganze Zahlen oder Floorzahlen wollen und der Bereich beliebig sein kann Ich setze es auf 4-64. Und dann schieb Been in das Bins-Array. Wir können diese Zeile kommentieren , weil wir die Audiodaten wieder verwenden Und innerhalb der zweiten Schleife bekommen wir einen Bean von Bins. Eckige Klammern I mal NAM-Scheibe plus G. Der erste Teil ist für jeden Kreis und der zweite Teil für jedes Segment in diesem Kreis. Die Daten müssen erneut zugeordnet werden, genau wie zuvor Ich möchte es nur aufgeräumter schreiben. Lassen Sie uns jetzt noch ein paar Variablen deklarieren. Hier fügen wir mapped und hier oben für den gesamten Sketch sichtbar hinzu, wir fügen Mean DB und Max DB Sie sind nur kürzer zu schreiben, und wir können sie innerhalb von Audio auf einen Wert setzen Der Mittelwert DB entspricht der Analyse eines Knotens. Viele Dissibel, max. DB, Analyse eines Knotens, Analyse eines Knotens, Zurück zur Render-Funktion setzen wir Mapped equals, um den Dotmap-Zweig und Audiodaten zuzuordnen, wobei die eckigen Klammern von Mean DB und Max DB auf Null und Eins stehen, und klammern den Mean DB und Max DB auf Null und Eins stehen, und klammern den Wert mit true. Dieser Wert kann verwendet werden, um die Leitung damit zu steuern. Linie mit ihm entspricht also Linie mit ihm. Eckige Klammern in der Karte, dann müssen wir nur Kontext-Punktlinie so setzen, dass sie wieder mit ihr übereinstimmt Okay, das funktioniert irgendwie. Wir sehen, dass sich jedes Slice entsprechend einer anderen Frequenz in den Audiodaten aufbaut , was nett ist. I O. Aber das muss noch angepasst werden. Manchmal ist die Linienbreite eine ungültige Zahl, sodass der Kontext bei der vorherigen gültigen Zahl bleibt, was dazu führt, dass einige der Bögen auf seltsame Weise blinken Wir können das mit einer Bedingung beheben. Wenn die Zeile wed kleiner als eins ist, einfach fort und überspringen Sie den Rest des folgenden Codes. Die andere Sache ist, dass der Kreis voll ist. Wir zeichnen alle Scheiben, aber es würde besser aussehen, wenn wir nur ein paar davon nach dem Zufallsprinzip zeichnen würden. Dafür können wir unser Beans-Array verwenden. Wir fügen hier eine weitere Bedingung hinzu. Wenn been gleich Null ist, fahren Sie fort. Und dann innerhalb der Schleife , in der wir die Behälter definieren. Wir können einige von ihnen nach dem Zufallsprinzip auf Null setzen. Wenn der Zufallswert größer als 0,5 ist, entspricht Been gleich Null Das ist jetzt besser. Sie können es auch mit anderen Audiophilen testen , wenn Sie möchten Das ist unser Sketch. Ich hoffe es gefällt dir. Als kleinen Bonus werden wir in der nächsten Lektion eine Variante davon sehen. 39. Erfahre mehr über die Postererstellung: Das Poster, das unsere Skizze inspiriert hat basierte auf einem anderen Poster, einem klassischen des Schweizer Designers Joseph Mueller Brockman Es ist von 1955 und hat viele Menschen inspiriert Es gibt Dutzende von Remixen und Variationen davon online. Wir werden hier unsere eigene Version erstellen, basierend auf dem Code, den wir bisher geschrieben haben Ich würde vorschlagen, eine Kopie der Skizze zu erstellen, bevor Sie beginnen. Ich nenne meinen Sketch Audio Two und führe ihn dann über das Terminal aus. Ich zeige den Online-Editor dieses Mal nicht , weil du schon weißt, was zu tun ist. Wir werden damit beginnen, die Anzahl der Scheiben auf nur eins zu ändern. Deklarieren Sie dann eine neue Variable namens PHI, was ein griechischer Buchstabe ist, um den Winkel der Scheibe zu speichern. Wir können diese Zeile löschen, die einige Beans auf Null setzt , und wenn wir zur Render-Funktion herunterscrollen, können wir diese Bedingung auch entfernen Und diese Zeile, mit der sich die Zeile ändert, dann setzen wir pi auf Slice Time Mapping Und wo wir den Bogen zeichnen, werden wir Slice gegen Pi austauschen Okay, das ist schon nicht allzu weit von unserer Referenz entfernt, aber wir müssen eine Lücke zwischen den Bögen lassen und das können wir tun, indem wir dem Radius ein paar Pixel hinzufügen Oder in diesem Fall ist es besser, wenn wir den Radius vor der Bogenfunktion erhöhen den Radius vor der Bogenfunktion Und dann erhöhen Sie ihn am Ende erneut um die andere Hälfte der Linienbreite Jetzt müssen wir diese Bögen nur noch so verschieben , dass sie am Anfang nicht alle ausgerichtet sind Wir können hier oben ein neues Array namens Rotationsoffsets erstellen hier oben ein neues Array namens Rotationsoffsets Wir benötigen wieder einen Wert pro Kreis , damit wir diese Schleife überhaupt verwenden können Lassen Sie uns einen neuen für die Rotation erstellen, um die Dinge voneinander zu trennen. Drehung des eingestellten Punktdrucks, zufälliger Punktschlüssel, mathematischer Punkt Pi mal -0,25 und mathematischer Punkt Pi Dadurch erhalten wir einen zufälligen Winkel zwischen -45 Grad und plus 45 Grad. Jetzt können wir den Kontext einmal pro Kreis drehen , direkt nach dem Speichern des Kontextpunkts geben wir den Punkt drehen, Drehung der gesetzten eckigen Klammern I ein. Wenn wir uns das Referenzposter noch genauer ansehen wollen , geben wir den Punkt drehen, Drehung der gesetzten eckigen Klammern I ein. Wenn wir uns das Referenzposter noch genauer ansehen wollen , können wir 90 Grad vom ursprünglichen Also minus Mathepunkt Pi mal 0,5. Und wenn Ihnen die Bewegung im Uhrzeigersinn nicht gefällt, können Sie einfach die gesamte Skizze auf der Y-Achse spiegeln , indem Sie den Maßstab auf eins und minus eins setzen Letzte Anpassung: Stellen Sie die erste Linie mit dieser 210 ein. Und da ist unsere bescheidene Hommage an ein klassisches Stück Grafikdesign Sie können versuchen, eine andere Anzahl von Kreisen oder Scheiben oder ein anderes S in der Funktion zu verwenden , oder Sie können sogar versuchen, etwas Farbe hinzuzufügen , das auf Delirys basiert , die wir in den vorherigen Lektionen gesehen haben Eine weitere Idee ist, dass Sie Ihre eigenen Designreferenzen finden und versuchen , sie zu rekrutieren und sie auch audioreaktiv zu machen Jim. In dieser Lektion haben wir gelernt, wie man Audiodaten nutzt , um audioreaktive Bilder zu erstellen . Wir haben nur an der Oberfläche der Web-Audio-API gekratzt. Ich hoffe, Sie fanden es interessant und vielleicht hat es Sie neugierig gemacht , weiter nachzuforschen und mehr darüber zu erfahren Jetzt gehen wir von Audio über und beginnen in der nächsten Lektion mit etwas anderem. 40. Ein einzelnes Partikel zeichnen: In dieser Lektion werden wir unsere letzte Skizze erstellen, und das Thema ist Partikel. Ertrunkene Partikel sind nichts Besonderes. Sie können nur winzige Kreise sein. Der interessante Teil ist, wie sie sich verhalten. Wie bisher zu Beginn jeder Lektion müssen wir eine neue Skizze erstellen. im Online-Editor Erstellen Sie im Online-Editor noch einmal einen weiteren Fork der Standardvorlage. Geben Sie im Terminal Canvas, Dash Sketch, Sketch Particles, Dash Dash New ein, öffnen Sie die JavaScript-Datei im Editor und ändern Sie die Abmessungen auf 1080 x 1080. Wir fangen einfach an und zeichnen einzelne Partikel. Aber zuerst müssen wir definieren, was Partikel sind. Am Ende der Datei werden wir im Konstruktor eine neue Klasse namens particle erstellen , ein Objekt mit den drei Eigenschaften X, Y und Radius mit einem Standardwert von 10. Dann speichern wir diese Eigenschaft als Zahlenvariablen, wobei dieser Punkt X gleich X, dieser Punkt Y gleich Y und dieser Punktradius gleich Radius Im Moment benötigen wir nur eine Funktion zum Zeichnen des Partikels, die den Kontext als Parameter berücksichtigt Dieser Teil sollte jetzt sehr vertraut sein. Wir beginnen mit Context Dot Save und Context Dot Restore, dann übersetzen wir den Kontext diesen Punkt X und diesen Punkt Y, dann beginnen wir eine neue Form mit dem Kontext Punkt Begin Path und zeichnen einen Kreis mit dem Kontext-Punktbogen x0y0 Dieser Radius von Null bis Mathe Pi mal zwei, dann rufen wir fill auf, und wir können den Feldstil diesmal auf Y setzen, also zurück zum Anfang der Datei ucrite und ray, die ucrite Um ein anderes Partikelobjekt zu speichern, können wir innerhalb der Skizzierfunktion X, Y und Partikel deklarieren Um das Array zu füllen, benötigen wir nun eine Schleife mit vier Schleifen, und ich werde das vorerst auf nur eine Iteration festlegen Wir können die Zahlen später erhöhen. X wird sich in der Mitte des Bildschirms befinden, also mal 0,5 und Y-Höhe mal 0,5. Denken Sie daran, dass diese Werte in der Skizzierfunktion verfügbar sind, wir sie jedoch deklarieren müssen, bevor wir sie verwenden können. Jetzt kann es sich bei einem Partikel um ein neues Partikel handeln, das sich in X und Y bewegt, und wir können den Radius als Standardwert beibehalten. Und dann schieben Sie Partikel in die Partikelanordnung. Gehen Sie zur Renderfunktion über, ändern Sie die Hintergrundfarbe auf Schwarz und erstellen Sie für jedes Partikel eine Schleife mit dem Namen Partikelpunkt w, der den Kontext weitergibt. Und da ist unser Partikel, passe A in der Mitte der Leinwand an und es ist nicht sehr aufregend Um es interessanter zu machen, müssen wir ihm mehr Eigenschaften hinzufügen, und wir werden uns einige Namen aus der Physik leihen X und Y können als Position bezeichnet werden. Dann benötigen wir zwei weitere Eigenschaften für die Beschleunigung, AX und AY. Zwei weitere für die Geschwindigkeit, VX und VY, und zwei weitere für die Anfangsposition, und IY, die im Grunde Kopien von X und Y sind. Dann benötigen wir eine neue Funktion namens update, die wir für jeden Frame der Skizze aufrufen, damit wir zur Einstellung wechseln und animate auf True setzen können True setzen Kurz bevor wir Particle Dot Draw aufrufen, wir auch Particle Dot Update Innerhalb von Update werden wir die Geschwindigkeit um die Beschleunigung erhöhen , wobei VX plus dieser Ax und dasselbe für VY und AY entsprechen Wir werden die Position um die Geschwindigkeit erhöhen , wobei dieser Punkt X plus diesem Punkt X entspricht und dieses Y-Plus diesem Punkt Y entspricht. an Ort und Stelle ist, müssen Sie nur noch etwas Kraft auf das Sie nur noch etwas Kraft auf können wir tun, indem wir die Beschleunigung, vorerst nur ax, um eine winzige Zahl wie 0,001 erhöhen vorerst nur ax eine winzige Zahl Dadurch beschleunigt sich das Partikel allmählich und schießt vom Bildschirm ab In der nächsten Lektion werden wir uns mit interessanteren Möglichkeiten befassen, Kräfte auf das Teilchen auszuüben . 41. Über das Aufbringen von Kräften lernen: Wir werden dafür sorgen, dass sich das Partikel vom Cursor wegbewegt. Wir müssen uns erneut mit einem Thema befassen, das wir zuvor behandelt haben, nämlich der Cursorinteraktion Dieser Teil wird Ihnen bekannt vorkommen und Sie können Sketch Curves gerne öffnen , um Code von dort zu kopieren , wenn Sie möchten Oder wir können es einfach noch einmal eingeben , da nicht viel zu tippen ist Wir beginnen mit einer globalen Variablen namens I Canvas. Und setzen Sie sie auf Canvas , eine Eigenschaft, die wir auch im Rahmen der Sketch-Funktion verfügbar machen müssen im Rahmen der Sketch-Funktion Dann fügen wir dem Canvas einen Event-Listener hinzu. Bei gedrückter Maus wird der Handler nach der Sketch-Funktion bei gedrückter Maus Wir deklarieren eine neue Funktion, die bei gedrückter Maus aufgerufen wird das Ereignisobjekt E als Parameter verwendet. Hier fügen wir dem Fenster zwei neue Listener hinzu, einen für die Mausbewegung und einen für die Mausbewegung nach oben Diesmal bewege ich mich etwas schneller , weil wir das schon einmal gesehen haben Deklarieren Sie bei Mausbewegung auch mit E als Parameter und bei Mausklick ohne Parameter. Hier wissen wir, dass wir den Event-Listener entfernen können, wir fügen ihn mit gedrückter Maus Zurück zur Mausbewegung. Wir können die Position des Cursors proportional zum Maßstab der Skizze mit derselben Formel berechnen Cursors proportional zum Maßstab der , die wir für Sketch Curve Entro verwenden X entspricht dem Abstand zwischen Klammern, E Offset X geteilt durch L Leinwand, Punkt, Offsetbreite, dann multiplizieren Sie das mit der Breite der Duplizieren Sie dann die Linie und tauschen Sie X gegen Y und Breite gegen Höhe Diesmal müssen wir diese Zeilen nicht kopieren und mit gedrückter Maus hineinfügen. Stattdessen können wir die Logik an eine Mausbewegung delegieren, indem wir sie bei gedrückter Maus aufrufen Jetzt müssen wir die Position des Cursors in einem Objekt speichern , das in der gesamten Skizze sichtbar ist Also lass uns hier oben einen erstellen. Nennen Sie ihn Cursor und geben Sie ihm zwei Eigenschaften, X und Y. Beide beginnen mit derselben großen Zahl, dann nach innen bei einer Mausbewegung setzen wir den Cursor X gleich X und den Cursor Y gleich Y. Drinnen mit der Maus nach oben können wir diese Werte wieder auf eine große Zahl zurücksetzen, nur um sicherzustellen , dass sie sich nicht in der Nähe des Partikels befinden , wenn wir den Cursor nicht Wir können dieses Objekt jetzt protokollieren um zu sehen, ob Und wir sollten um diese Ecke eine Zahl nahe Null und um diese Ecke eine Zahl nahe 1080 sehen und um diese Ecke eine Zahl nahe . Jetzt müssen wir den Abstand zwischen dem Cursor und dem Partikel berechnen . Wir haben das schon einmal in unserer IT-Testfunktion gemacht. Dieses Mal werden wir es im internen Update machen. Lassen Sie uns ein paar Variablen deklarieren. DX DY, DD und dieses Delta. DX ist der Unterschied zwischen diesem Punkt X und Cursorpunkt X. DY ist der Unterschied zwischen diesem Punkt Y und dem Cursorpunkt. Und DD ist die Hypotens, also die Quadratwurzel des mathematischen Punktes, dx mal dx plus dy mal dy Dann brauchen wir eine Bedingung, wenn DD kleiner als etwas ist, und das kann auch in einer Eigenschaft gespeichert werden Also lass uns hier oben einen erstellen. Nennen Sie es Min dist und setzen Sie es auf 100. Nun zurück zur Bedingung, wenn DD kleiner als dieser Punkt Min Dist ist, und hier werden wir die Beschleunigung einstellen. Wir wollen einen Wert, der proportional zum Kehrwert der Entfernung ist, was bedeutet, dass proportional zum Kehrwert der Entfernung ist, was bedeutet, er umso stärker ist, je näher der Cursor am Partikel ist Und deshalb brauchen wir eine Variable namens Delta, was einer Mindestentfernung minus der aktuellen Entfernung DD entspricht Dann kann Ax auf DX geteilt durch DD multipliziert mit diesem Delta gesetzt geteilt durch DD multipliziert mit diesem Delta Und das Gleiche gilt für AY. Wenn wir nun klicken und den Cursor in die Nähe des Partikels ziehen , schießt er in die entgegengesetzte Richtung. Die Druckkraft ist zu stark. Wir müssen das, was wir berechnet haben, mit einer kleinen Zahl multiplizieren, die wir in einer neuen Eigenschaft namens Push-Faktor speichern können . Ich werde ihn auf 0,02 setzen und dann sowohl AX als auch AY damit multiplizieren Das ist die Schubkraft und wir wollen auch die Zugkraft erhöhen. Dadurch wird das Partikel wieder in seine ursprüngliche Position gebracht. Jetzt schreibe ich es vor der Druckkraft, weil es ständig auf das Partikel einwirkt ständig auf das Partikel unabhängig davon, wo sich der Cursor befindet. Diesmal ist dx dieser Punkt x minus dieser Punkt X, und Dy ist dieser Punkt ay minus diesem Punkt Y. Ax wird Dx mal dieser Punkt-Pull-Faktor sein , den wir gleich deklarieren werden. Und AY ist DY mal Pullfaktor. Lassen Sie uns den Pull-Faktor hier oben deklarieren ihn auf 0,004 setzen Immer wenn wir diese Bedingung eingeben, die Druckkraft Vorrang vor der Zugkraft, aber wir wollen, dass sie addiert werden, also brauchen wir plus gleich Dadurch versucht das Partikel, zu seiner ursprünglichen Position zurückzukehren, aber es wird nie wirklich gestoppt Es gewinnt weiter an Dynamik und schießt über das Ziel hinaus. Wir müssen es mit einem Dumpingfaktor beruhigen , den ich auf 0,95 setzen werde Und das verwenden wir, nachdem wir die Geschwindigkeit berechnet haben, also multiplizieren wir sowohl VX als auch VY mit diesem Punkt Dam-Faktor Jetzt ist das Verhalten viel besser unter Kontrolle, und wir können spüren, wie beide Kräfte auf das Teilchen einwirken, wenn wir versuchen , es wegzudrücken, und es versucht, zu seiner ursprünglichen Position zurückzukehren Das macht Spaß, aber es ist nur ein einzelnes Partikel. In der nächsten Lektion werden wir mehr davon machen. 42. So verteilt man die Partikel: Wir werden mehrere Partikel erzeugen, und wie wir es bereits in diesem Kurs getan haben, werden wir sie mithilfe einer Zufallsfunktion auf der Leinwand verteilen . Wir werden eine andere Funktion als Canvas Sketch UTLT Time namens Inside Circle verwenden Sketch UTLT Time namens Inside Circle Wenn Sie den Online-Editor verwenden, gehen Sie erneut zum Feld Abhängigkeiten und geben Sie CasketchTo Sie müssen das zufällige Modul oben in der Datei portieren oben in der Datei Skizze auf Leinwand, zufällig. Dann können wir ein neues Array erstellen, um die zufälligen Positionen zu speichern, die als Pose bezeichnet werden. Ändern Sie unseren Wert für die Schleife 1—200 und rufen Sie dann einen zufälligen Punkt innerhalb eines Kreises Der erste Parameter ist der Radius, den ich auf 400 setze Und der zweite Parameter ist das Array für das zufällige X und Y, das die Pose sein wird Diese Funktion füllt das Array also mit einem zufälligen X und einem zufälligen Y auf. Wir haben bereits X und Y in der Mitte der Leinwand, also müssen wir nur die eckige Pauseklammer Null zu X und die eckige Klammer eins zu Y hinzufügen . Und jetzt haben wir unsere Partikel zufällig innerhalb des Kreises verteilt Wir haben schon einmal eine zufällige Verteilung verwendet, und obwohl sie funktioniert und ziemlich gut aussieht, ist sie manchmal auch ein Wir können andere interessante Möglichkeiten finden die Partikel zu verteilen, und auch hier können wir uns von einer vorhandenen Referenz inspirieren lassen. Ich habe ein bisschen geblättert und dieses Bild von Paul McNeil gefunden. Ich denke, wir werden versuchen, das in einem Code nachzubilden Ich behandle diese Punkte Ich werde Ihnen helfen, die Logik hinter der Neuerstellung dieses Partikellayouts zu verstehen Aber die Absicht hier ist , Sie dazu zu bringen, über die Logik hinter jeder Anordnung oder jedem Layout nachzudenken die Logik hinter jeder Anordnung oder jedem , das Sie erstellen möchten Ich mache eine schnelle Analyse dieses Themas. Ich sehe einen konzentrischen Kreis der von der Mitte ausgeht und nach außen wächst Wenn sie größer werden, schaffen sie Platz für mehr Punkte, und die Punkte scheinen einen gewissen Abstand voneinander einzuhalten Je kleiner die Punkte sind, desto weiter sind sie voneinander entfernt. Das gibt uns einen Ausgangspunkt. Wir müssen herausfinden, wie viele dieser Punkte wir entlang der Umfänge dieser Kreise platzieren können entlang der Umfänge dieser Sie erinnern sich vielleicht , dass die Formel für den Umfang des Kreises zwei Pi R lautet. Wenn wir also einen Kreis mit einem Radius von 100 nehmen, wären die Umfänge zwei mal drei Punkte, 14 mal Das ist ungefähr 628. Wir können den Kreis öffnen und die Umfänge als eine einzige Linie darstellen Um dann die Anzahl der Punkte zu ermitteln, teilen wir diese durch die Breite jedes Punktes Sagen wir, wenn die Breite jedes Punktes 60 ist, dann sind sechs bis 8/60 zehn Punktieren Sie etwas mit einer Bodenpunktzahl, was bedeutet, dass wir zehn volle Punkte entlang des Umfangs platzieren können zehn volle Punkte entlang des Umfangs Ich hoffe, diese Erklärung jetzt fertig. Schreiben wir sie im Code Wir beginnen mit ein paar neuen Kreisen mit variabler Zahl, die auf 15 gesetzt sind, dann den Punktradius , der 12 entspricht, dann den Kreisradius , der bei Null beginnen kann, dann den Anpassungsradius, der dem anfänglichen Punktradius entspricht. Kann die vier Schleifen, die wir zuvor geschrieben haben, auskommentieren und eine neue Schleife von Null bis Zahl von Kreisen schreiben. Darin benötigen wir eine weitere Schleife, bei der der Buchstabe G von Null auf NumFit wechselt Numfit ist die Anzahl der Punkte, die wir entlang des Kreises einpassen können, und wir müssen sie noch berechnen Zuerst benötigen wir die Umfänge, also mathematischen Punkt Pi mal zweimal den Kreisradius, und die NumFit, also die Umfänge geteilt durch die Breite des Punktes , also den Anpassungsradius , Wir wollen keine Verstöße, also müssen wir diesen Wert unterschreiten, und wir müssen auch den allerersten Punkt berücksichtigen , wenn der Kreisradius Null ist also müssen wir diesen Wert unterschreiten, und wir müssen auch den allerersten Punkt berücksichtigen, wenn der Kreisradius Null ist, also brauchen wir eine Ausnahme. Wir können ihn hier als eine einzige Zeile schreiben. Wenn ich diese Formel verwende, wird L gleich eins gesetzt. Wenn ich also Null ist, wird Non-Fit Eins sein. Andernfalls wird es auf der Grundlage der Circum-Referenzen berechnet Die letzte Variable hier wird die Größe des Segments sein. Nachdem wir den Kreis durch Unpassung geteilt haben, also mathematischer Punkt Pi mal zwei geteilt durch Nu-Fit. der inneren Schleife können wir nun den Winkel jedes Punktes berechnen In der inneren Schleife können wir nun den Winkel jedes Punktes berechnen und mit einer neuen Variablen namens Theta beginnen entspricht der Passschicht mal G. Um die X- und Y-Position zu ermitteln, verwenden wir eine Formel, die wir bereits gesehen haben bei der X der Kosinus von Theta mal dem Radius des Kreises und Y der Sinus von Theta mal dem Radius ist. Dieser nächste Teil ist derselbe wie zuvor, dass Partikel gleich neuem Partikel, X und Y und Partikelpunktschiebepartikel sind. Und jetzt der wichtigste Teil , der darin besteht, den Radius des Kreises bei jeder Iteration weiter zu vergrößern Also Kreisradius plus gleich Fußradius mal zwei. Lassen Sie uns das überprüfen und wir sind irgendwo angekommen, aber noch nicht ganz da Wir müssen den Kreis in die Mitte der Skizze verschieben, also müssen wir sowohl zu X als auch zu Y wieder Breite mal 0,5 und Höhe mal 0,5 addieren . Die Punkte liegen sehr dicht beieinander, also müssen wir einige Lücken hinzufügen, eine Variable für die Lücken zwischen den Kreisen Ich setze sie auf acht und füge sie dann zum Kreisradius am Ende der Schleife hinzu. Wir benötigen auch eine Variable für die Lücke zwischen den einzelnen Punkten Ich setze sie auf vier und addiere sie hier zur Breite des Punktes. Um nun einige dieser Punkte kleiner zu machen, setzen wir den Partikelradius auf den Punktradius. Am Ende der Schleife können wir ihn ändern, indem wir die Zahl der durch die Zahl dividierten Kreise multiplizieren. Eigentlich brauchen wir das Gegenteil, eins minus geteilt durch die Zahl der Kreise, und wir haben es fast geschafft. Diese Linie ist eine Änderung der Größe der Punkte unter Verwendung einer linearen Funktion. Wie wir in der vorherigen Lektion gesehen haben, können wir auch die ESN-Funktion verwenden Lassen Sie uns also dasselbe Modell importieren. ESS, vergessen Sie nicht, die Abhängigkeit zu installieren , wenn Sie einen Online-Editor verwenden, dann kostet es so viel wie ESS zu benötigen, und wir können es hier als eins minus Est quadout verwenden, ich dividiere durch numerische Kreise. Das ist eleganter. Und obwohl es nicht genau wie die Referenz ist, denke ich, es ist ziemlich nah dran und es sieht besser aus als reiner Zufall Um das Verhalten interessanter zu gestalten, können wir nun in die Partikelklasse gehen und die Werte randomisieren Statt eines Push-Faktors von 0,02 können wir einen Zufallsbereich zwischen 0,01 und 0,02 Das Gleiche gilt für den Pull-Faktor mit einem Bereich zwischen 0,002 und 0,006 Ein Dump-Faktor kann zwischen 0,90 und 0,95 variieren. Der Mindestabstand kann auch zwischen 100 und 200 variieren. Lassen Sie uns das ausführen Ich finde, es sieht in Ordnung aus. Die Partikel verhalten sich immer noch genauso wie zuvor, aber irgendwie fühlt es sich besser an , sie mit diesem Layout zu durchqueren. Wir haben das Verhalten der Partikel und wir haben eine interessante Verteilung, und in der nächsten Lektion werden wir einige Farben einführen. 43. Skalierung und Farben ändern: In der Aktualisierungsfunktion haben wir Zugriff auf einige Werte, haben wir Zugriff auf einige Werte denen wir die Grafik beeinflussen können Zum Beispiel können wir die Partikel vergrößern , weiter sie von ihrer Ausgangsposition entfernt sind Lassen Sie uns eine neue Eigenschaft namens Skala erstellen und sie auf eins setzen. Dann multiplizieren wir in der Zeichnungsfunktion den Radius mit der Skala. Beim Update, bei dem wir DX und DY für die Ausgangsposition berechnen, können wir auch die Hypotens berechnen und diese Linie kopieren Stell es hier auf, um DD zu bekommen. es dann auf DD aufbauen, können wir den Maßstab abbilden und wir wissen genau , welches Modell wir dafür benötigen . Also lass es uns importieren. Es ist das mathematische Modell von Canvas SketTL und dann zurück zur Skala. Wir werden den Bereich auf der Grundlage von DD 0-200 abbilden Ändern Sie die Skala der Partikel 1-5 speichern Sie dann die Datei, und das sieht Könnten Sie dieselbe Idee verwenden und weitere Eigenschaften der Partikel wie die Farben ändern ? Das passt auch gut zur Colormap-Bibliothek Wir verwenden es für Skizzierkurven. Wir haben es bereits ohne Styling, aber wenn Sie ein Online-Editor sind, müssen Sie das für jede Skizze tun Geben Sie also die Farbtabelle ein, um die Formatierung aufzuheben. Und dann benötigen Sie die Farbkarte für die Vorderseite der Farbkarte. Deklarieren Sie eine neue Variable namens colors, setzen Sie sie auf Colormap, öffnen Sie geschweifte Klammern und für die Map selbst verwende ich Varies. Für die Anzahl der Farben entscheide ich mich dann für 20. Wir können diesen kommentierten Outloop löschen weil wir ihn nicht mehr verwenden werden , und dann nach unten zur Partikelklasse scrollen und eine neue Eigenschaft namens color deklarieren, für die Farbe eckiger Klammern, Null, gesetzt werden kann Bei der Aktualisierung wollen wir einen weiteren abgebildeten Bereich, genau wie wir es für die Skala getan haben Aber dieses Mal für den Index des Farbarrays, sodass wir eine Variable für den Farbindex erstellen und sie auf den mathematischen Punktboden setzen können , weil der Index eine Ganzzahl für mathematische Punktkarten sein muss, der Bereich DD von Null bis Hundert bis Null und die Länge der Farbpunkte Minus eins. In diesem Fall möchten wir auch die Klammer 22 als letzten Parameter festlegen. Aktualisieren Sie dann die Farbeigenschaft auf Farben, eckige Klammern und die Farbe. In der Zeichenfunktion können wir den Feldstil auf diese Punktfarbe aktualisieren. Das sieht nett aus, aber vielleicht ist es ein bisschen seltsam, kleine Partikel vor den großen zu sehen. Sie werden in derselben Reihenfolge gezeichnet. Sie wurden geschaffen. Wenn Sie also möchten, dass die großen Partikel im Vordergrund erscheinen, müssen wir ihre Reihenfolge in der Anordnung ändern. Das können wir mit einer Funktion des Arrays namens sort tun. Es funktioniert, indem es Wertepaare vergleicht und die Arrays an einem Ort sortiert Wir haben zufällig einen geeigneten numerischen Wert für die Sortierung in Form unserer Skaleneigenschaften Im Grunde wollen wir, dass kleinere Skalen zuerst gezeichnet werden und große Skalen zuletzt gezeichnet werden. Das Array kann in aufsteigender Reihenfolge der Skalen sortiert werden , wobei die Partikelpunktsortierung A und B verwendet wird. Anschließend wird die Punktskala bei Skala minus B zurückgegeben Das sieht jetzt natürlicher aus. Wir verwenden eine Farbkarte, um Partikeln Farben zuzuweisen, aber es gibt noch eine andere Technik , um ihnen Farben zuzuweisen, die wir in der nächsten Lektion kennenlernen werden. 44. Erstellen von Bilddaten: Dies ist unsere letzte Lektion, also werden wir etwas Fortgeschritteneres ausprobieren. Wir legen die Farbe unseres Partikels fest, legen ein Bild zugrunde und mischen diese dann später mit den Farben aus einem anderen Bild. Wir brauchen ein paar Bilder, mit denen wir arbeiten können. Ich werde zwei von nsplash.com auswählen. Sie können kostenlos heruntergeladen werden und haben normalerweise Das erste, das ich auswählen werde, wird dieses Porträt von Art Huntington Und ich wähle diese Farbe auch für den Ballon von Jess Wir brauchen nicht wirklich ein hochauflösendes Bild. In der Tat, noch besser, wenn sie Les sind. Ich ziehe sie in Photoshop, schneide sie auf ein quadratisches Format zu und skaliere sie auf 64 mal 64 Pixel herunter Ich speichere sie als Bild. 01 und Bild 02 befinden einem Ordner namens Images, ich in den Skizzen erstellt habe Jetzt zurück zum Code. Wir werden eine neue Synchronizer-Funktion namens Load Image erstellen eine neue Synchronizer-Funktion namens Load Sie verwendet eine URL als Parameter und gibt ein neues Versprechen zurück. Mit Resolve und Reject innerhalb des Versprechens können wir ein neues Bildobjekt erstellen. Wenn das Bild dann geladen ist, geben wir resolve zurück und übergeben das Bildobjekt. Falls ein Fehler auftritt, lehnen wir das Versprechen und setzen dann die Bildquelle auf die URL, die wir übergeben haben. Dies ist eine Synchronisierungsfunktion und wir möchten, dass unser Bild geladen wird, bevor wir mit dem Skizzieren beginnen. Wir müssen also etwas Ähnliches wie in der Audioskizze tun Ähnliches wie in der Audioskizze und darin eine Sync-Startfunktion erstellen. Wir können unser erstes Bild laden, wobei Emga entspricht, um auf das Laden des Bildes zu warten Und hier wird die URL für mich Bild 01 sein. Dieser Pfad bezieht sich auf den Sketches-Ordner Wenn Sie also einen anderen Namen oder einen anderen Ordner verwenden , stellen Sie sicher, dass Sie den richtigen verwenden Wenn Sie einen Online-Editor verwenden, benötigen Sie ebenfalls eine öffentlich gehostete URL, genau wie die Audiodatei aus der vorherigen Lektion Diese von Splash finden Sie in den Links unter dem Video. Und nur für den Online-Editor müssen Sie Cross-Origin auch auf Anonym setzen. Andernfalls können Sie die Daten nicht aus einem Bild lesen , das aus einer anderen Domain stammt. Hier verwenden wir es EMGA, was wir noch nicht deklariert haben. Also lass uns das oben in der Datei machen. Unser Ziel ist es, Daten aus dem Bild zu extrahieren, aber das können wir direkt aus dem Bildobjekt machen. Wir müssen das Bild zuerst auf eine Leinwand zeichnen, und es muss nicht dieselbe Leinwand sein , die wir für unsere Skizze verwenden Lassen Sie uns also eine neue Leinwand erstellen und sie als EMGA Canvas speichern, was dem Dokumentpunkt Create Element Compass entspricht Und speichern Sie auch den EMGA-Kontext, nämlich Emga Canvas, Canvas Dot G Context zwei D. Die Abmessungen dieser neuen Leinwand entsprechen denen des Bildes, das wir gerade Also MGA mit einer ENGA-Höhe, und wir brauchen nur eine Sache aus diesem Kontext, das Zeichnen von Image Emga X Null und Y Null Wenn wir sehen wollen, was sich auf diesem neuen Canvas befindet, können wir es mit einem Context-Draw-Bild, Emga Canvas 00, in unseren Haupt-Canvas zeichnen Und da ist unser kleines Bild in der oberen linken Ecke. Das hier zu sehen, kommt Ihnen vielleicht bekannt vor. Um nun Farben aus dem Bild zu extrahieren , werden wir Bilddaten abrufen. Lassen Sie uns in einer Variablen namens EMGA-Daten speichern, was dem AMGA-Kontext Ruft Bilddaten von X Null und Y Null bis MGA-Breite und MGA-Höhe Dadurch wird ein Objekt vom Typ Bilddaten zurückgegeben, und die Eigenschaft, an der wir interessiert sind, wird auch als Daten bezeichnet. Das ist also der, den wir hier speichern. Es ist ein großes Array mit sequentiellen LGBA-Werten. Für jedes Pixel des Bildes erhalten wir also vier Elemente im Array Der nächste Schritt besteht darin, das Pixel auf dem Bild zu finden, das der X- und Y-Position jedes Teils entspricht. Das äquivalente Bild X ist X geteilt durch die Breite, multipliziert mit der Bildbreite Das muss eine Ganzzahl sein, also müssen wir sie mit einem mathematischen Punktboden umschließen, dann die Linie duplizieren und diese gegen Y und Höhe austauschen Um nun den Index dieser Position im Bilddatenarray zu ermitteln , verwenden wir etwas Ähnliches wie das, was wir zuvor in unserer Lektion über Raster- und Audiodaten gesehen haben . Der Index ist AY mal die Breite des Bildes plus X, und da das Array vier Elemente pro Pixel RGBA hat, müssen wir dies mit vier multiplizieren Der rote Wert des Pixels entspricht den Emga-Daten, eckigen Klammern, Index plus Null, Grün entspricht Index plus eins und Blau entspricht Index plus zwei Dann können wir eine Farbzeichenfolge erstellen, die A heißt, Bectis für Zeichenkettenliterale, dann RGB, und zwischen Klammern setzen wir R Deklarieren wir diese Variable, die wir gerade zitiert haben. Dann übergeben wir cool A an das neue Partikel, deklarieren es im Konstruktor und wir können es unserer bestehenden Farbeigenschaft zuweisen und diese Zeilen auskommentieren oder aus dem Update löschen Jetzt können wir sehen, dass unser Partikel die Farbe aus dem Bild verwendet Es sieht noch nicht gut aus, also lassen Sie uns die Lücken verkleinern und mehr Kreise verwenden. Sagen wir 30. Wir können den Partikel auch anhand der Helligkeit des Pixels oder eines der Farbkanäle fertig stellen . Wir können den Radius dem Bereich des roten Kanals von Null und 255 bis Eins und 12 zuordnen. Der Effekt ist interessant, aber es gibt noch eine weitere Technik, die ich behandeln möchte, bevor wir zum Abschluss kommen. Ähnlich wie bei der Farbkarte werden wir die Farben auf der Grundlage der Entfernung der Partikel zu ihren Ausgangspositionen ändern der Entfernung der Partikel zu ihren Ausgangspositionen und Farben aus einem zweiten Bild verwenden. Überall im Code , wo wir EMGA haben, werden wir auch EMGB haben In der Startfunktion entspricht EMGB dem Laden von Bild, Bild 02, dann hier oben EMGB deklarieren und all diese Zeilen duplizieren EMGB deklarieren und all diese Zeilen duplizieren und A gegen B, EMGB Canvas, EMGB-Kontext, Breite und Höhe, Draw Image, EMGB-Daten austauschen EMGB Canvas, EMGB-Kontext, Breite und Höhe, Draw Image, und hier Call B deklarieren Wenn dann innerhalb der Schleife, wenn Ihre beiden Bilder dieselbe Breite und Höhe haben wie meine, müssen Sie nicht berechnen Sie erneut und Sie müssen nur RG und B duplizieren und aus EMGB-Daten lesen und dann Call B setzen Diesmal müssen wir Cd B nicht in das neue Partikel übergeben . Stattdessen übergeben wir ein neues Objekt, die Interpolation zwischen Call A und Call B. Dafür benötigen wir eine neue Lackierung namens Sie kennen die Routine bereits. Gehen Sie zum Feld Abhängigkeit und geben Sie Crawler Interpolate ein. Drücken Sie auf dem Terminal C, um den Prozess PMI zu stoppen, Crawler Dann die Pfeiltaste nach oben drücken und Sketch Particles erneut ausführen . Als Interpolat aus Crowler-Interpolate importiert. Hier gehen uns die Variablennamen für Farbe aus, also nennen wir es Call Map und stellen es so ein, dass es zwischen eckigen Klammern interpoliert, genannt A und genannt B. Dies ist das Objekt, genannt A und genannt B. das wir an das neue Partikel übergeben , anstatt A aufzurufen. Wir können mit einer Eigenschaft beginnen, die Farbe so Dann werden wir beim Update dasselbe tun, was wir für den Maßstab tun, und Farbe auf Cool Map setzen und basierend auf DD von Null und 200 auf Null und eins mit dem Spannsatz auf True anordnen Null und 200 auf Null . wir uns nun bewegen, sieht der Cursor, wie Wenn wir uns nun bewegen, sieht der Cursor, wie die Partikel Farben aus beiden Bildern annehmen. Und hier ist ein Beispiel mit einem anderen Bildpaar. Das war eine lange Lektion, aber ich hoffe, es gefällt euch, was wir erstellt haben. Wir decken viel ab und haben viele Techniken gesehen. Jetzt sind Sie dran, all diese Techniken, die wir gelernt haben, anzuwenden all diese Techniken, die wir gelernt haben , um Ihre eigenen visuellen Künste zu machen. Vielen Dank, dass Sie an dem Kurs teilgenommen haben, und ich hoffe, er war nützlich für Sie. 45. Kursprojekt: Hallo Leute. Für das Klassenprojekt möchte ich, dass Sie im Internet nach einigen Kunstreferenzen von berühmten Künstlern suchen , die Sie mögen oder einem anderen Künstler und versuchen, die Kunst nachzuahmen indem Sie sie im Java-Stil codieren und sie statisch machen wie ein Stück eines Posters oder versuchen, sie zu animieren oder zu einem versuchen, sie zu animieren Audiovisualisierer zu machen Versuchen Sie, Ihrer Fantasie freien Lauf lassen und Ihr eigenes einzigartiges Kunstwerk zu schaffen Das ist es. Ich warte darauf, dass deine Kunstschöpfung sie in Form eines Kurses präsentiert. 46. Letzte Tipps: Hallo zusammen. Ich hoffe, dir hat die Reise gefallen. Wir haben an einigen Kompositionen zusammen gearbeitet, aber der wichtigste Teil war die Technik, die wir gelernt haben, denn jetzt kannst du sie übertragen, sie woanders beantworten und etwas anderes kreieren. Obwohl wir viel besprochen haben, gibt es immer mehr zu besprechen. Deshalb habe ich eine kleine Liste mit Tipps für dieses letzte Video vorbereitet. Bibliotheken. Wir haben während des gesamten Kurses einige benutzt, aber es gibt noch 1.000 mehr. Manche Leute machen gerne alles selbst, aber manchmal ist es so, als ob man versucht, das Rad neu zu Wann immer Sie etwas Bestimmtes benötigen, würde ich empfehlen, zuerst MPM zu überprüfen Möglicherweise hat bereits jemand anderes an demselben Problem gearbeitet Wenn Sie Daten aus einer CSV-Datei lesen müssen, gibt es dafür Bibliotheken. Wenn Sie mit den Vektoren arbeiten zwischen Farbräumen konvertieren oder Schriftdateien laden müssen, gibt es auch Bibliotheken dafür. In die Website einbauen. Eine Skizze kann von selbst leben. Sie können Ihre Komposition exportieren und ausdrucken oder irgendwo veröffentlichen. Wenn Sie Ihre Skizzen jedoch online teilen möchten, können Sie dies auch mit einem Build-Befehl tun Generieren Sie statische JavaScript - und HTML-Dateien, die überall als normale Webseite gehostet werden können Falls Sie Ihre Skizze in eine bestehende Website integrieren möchten , denken Sie daran, dass wir immer die Canvases-API verwenden. Kann die wertvollen Teile Ihres Codes in ein anderes Projekt kopieren und es ohne Canvas-Sketch ausführen, Viele Leute beginnen mit der Verarbeitung von P Five Dot GS mit kreativem Programmieren , und das macht sehr viel Sinn Es gibt großartige Tools. Ich bin es gewohnt, mit einer nativen API zu arbeiten. Aber wenn Sie bereits mit pfive dotGS vertraut sind, können Sie es zusammen mit Canvas Sketch verwenden Es gibt ein einfaches Beispiel aus dem Bereich der Atemwege, das Ihnen zeigt, wie das geht Dokumentation. Das ist offensichtlich. Schauen Sie sich unbedingt die Dokumentation an, die nicht nur für Canvas Sketch oder Canvas API gilt, sondern für jede API, mit der Sie arbeiten Jemand hat sich die Zeit genommen, seinen Code zu organisieren und zu dokumentieren, damit wir das nutzen können. Es ist da, um uns zu helfen. Das war's also für mich. Ich bin gespannt, was Sie mit dem, was Sie im Kurs gelernt haben, geschaffen haben. Denken Sie daran, Ihre Komposition im Forum der Klasse zu veröffentlichen . Ich freue mich darauf, sie zu sehen.