Einführung in die Entwicklung von Javascript – Teil 1 | Chris Dixon | Skillshare

Playback-Geschwindigkeit


1.0x


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

Einführung in die Entwicklung von Javascript – Teil 1

teacher avatar Chris Dixon, Web Developer & Online Teacher

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.

      1 Einführung

      2:12

    • 2.

      Teile deine Arbeit auf Skillshare!

      1:09

    • 3.

      Das HTML Canvas einrichten

      6:37

    • 4.

      Grids und Co-Ordinates

      1:27

    • 5.

      Zeichnung auf dem Canvas

      10:48

    • 6.

      Text, Linien und Pfade

      8:32

    • 7.

      Schleife

      8:21

    • 8.

      Objekte mit der Tastatur

      5:32

    • 9.

      Kollisionen erkennen und Bouncing

      10:24

    • 10.

      Paddle

      9:05

    • 11.

      Scores verfolgen

      3:33

    • 12.

      Das Spiel beenden

      7:38

    • 13.

      Das Spiel starten und neu starten

      8:41

    • 14.

      Random Direction

      6:17

    • 15.

      Computer

      3:54

    • 16.

      Zufällige Beschneidung

      6:26

    • 17.

      Das Paddel auf dem Canvas halten

      2:52

    • 18.

      Schlussgedanken

      0:31

  • --
  • 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.

384

Teilnehmer:innen

4

Projekte

Über diesen Kurs

Gratis Leinwand zum Download:

https://github.com/chrisdixon161/HTML5-Canvas-Quick-Reference

Projekt-Phasen zum Vergleich:

https://github.com/chrisdixon161/Introduction-To-Javascript-Game-Development-Course Part-1

Wenn du dich schon einmal gefragt hast, wie du einfache 2D-Spiele bauen kannst, die im Browser funktionieren, dann wird dieser Kurs genau das sein, was du suchst!


Da Javascript in allen wichtigen Browsern integriert ist, ist es ideal für die Entwicklung von browser-basierten Spielen und während dieses Kurses werden wir ein einfaches pong-style entwickeln, um zu erfahren, was du wissen musst.

Beginnen Sie mit der HTML5-Leinwand. Dieses Element wird verwendet, um im Browser zu zeichnen, einschließlich Bildern, Formen, Texte und Animationen. Damit es perfekt für 2D-Spiele ist. Wenn du es vorher noch nicht benutzt hast, schauen wir uns alles an, was du für die Zeichnung brauchst. Dazu gehört die Funktionsweise des Netzsystems.

Außerdem schauen wir uns Folgendes an:

  • Text, Linien und Pfade
  • Koordinaten
  • Math
  • Looping
  • Objekte mit der Tastatur bewegen
  • Kollisionen erkennen und die Wände und Paddel abschneiden
  • Die Verfolgung von Scores
  • Das Spiel starten
  • Zufälligkeit für das Bouncing hinzufügen, um das Spiel weniger vorhersehbar zu machen
  • Computer
  • Bewegung auf der Leinwand

All dies kombiniert sich zu einem 2D-Spiel, das alle wichtigen Dinge umfasst, die du brauchst, um mehr Spiele auf deinem eigenen Weg zu bauen.

Der Kurs ist Anfängerfreundlich und ich versuche, alles zu erklären, wie wir gehen. Aber ein kleines beginner-friendly wird dir helfen, dein Verständnis und dein Erlebnis zu erleben. Ich habe bei Bedarf Kurse zu diesem Thema.

Wir freuen uns darauf, dich in der ersten Kurseinheit zu sehen!

Triff deine:n Kursleiter:in

Teacher Profile Image

Chris Dixon

Web Developer & Online Teacher

Kursleiter:in

Hello, My name is Chris and I am a Web Developer from the UK. I am an experienced trainer leading web development bootcamps and also teaching online courses.

My main areas of interest are Vue.js, Nuxt.js, Shopify, JavaScript, eCommerce, and business. I am passionate about what I do and about teaching others.

Whatever your reason for learning to build websites you have made an excellent career choice.

My personal motivation was to become my own boss and have more freedom and flexibility in my life. I also enjoy the technical challenge it provides and the way it constantly evolves. I built my first website back in 1999 and I have watched the web evolve into what it is today.

I try to make my courses enjoyable and try to remember what it was like when I was lea... Vollständiges Profil ansehen

Level: Beginner

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. 1 Einführung: Sie haben sich jemals gefragt wie Sie einfache 2D-Spiele erstellen die im Browser funktionieren, dann ist diese Klasse für Sie konzipiert. Da JavaScript in alle gängigen Browser integriert ist, eignet es sich perfekt zum Erstellen browserbasierter Spiele. Dieser Kurs bringt Ihnen alle Konzepte bei , die Sie beim Aufbau eines Pong-Stil-Spiels kennen müssen , alles in die Praxis umsetzen. Dieser Kurs ist nicht darauf ausgelegt , zu tief zu gehen, oder wenn Sie über vorhandenes JavaScript-Wissen verfügen, wird es Ihnen wirklich helfen, wenn Sie Fortschritte machen. Wir werden versuchen, alle wichtigen Konzepte abzudecken , die Sie benötigen, um grundlegende 2D-Spiele im Browser zu erstellen , und dazu richten wir zunächst den HTML Canvas ein. Der Canvas ist eine ideale Möglichkeit, innerhalb des Browsers zu zeichnen. Es ist perfekt, um unseren Spielbereich zu zeichnen, Dinge wie den Ball, die Pfützen. Wir können auch JavaScript verwenden, um diese auch auf der Canvas zu verschieben. Aber wenn wir mit einem Canvas arbeiten, benötigen wir ein wenig Hintergrundwissen über das Rastersystem. Das ist alles auch in dieser Klasse abgedeckt. Aber keine Sorge, es ist wirklich einfach abzuholen. Wir werfen einen Blick auf alle grundlegenden Zeichnungsfunktionen wie das Zeichnen von Text, das Zeichnen Linien, Zeichnen von Quadraten und Rechtecken, Kreisen und wie wir auch Looping anwenden können, damit wir es wiederholen können Prozesse, die ein wirklich reibungsloses Spiel machen. Wir werden uns auch ansehen, wie wir mit unserem Spiel interagieren und Objekte über die Tastatur bewegen können . Natürlich, welche Art von Pong Spiel wäre komplett? Wir haben nicht damit fertig, dass der Ball von verschiedenen Gegenständen abprallte. Der Ball muss von allen Seiten unseres Spiels abprallen. Wir müssen eine Punktzahl knacken, wenn es auf eine bestimmte Seite trifft. Wir müssen von den beweglichen Paddeln abprallen. All dies wird in dieser Klasse abgedeckt. Sie benötigen keine zusätzlichen Tools oder um Einkäufe für diese Klasse zu tätigen. Alles was wir brauchen ist ein Webbrowser und einen Freitexteditor. Wenn das nach etwas klingt , das Sie begeistert und Sie etwas darüber lernen möchten, springen Sie in die Klasse und wir sehen uns in der ersten Lektion, in der wir mit der Einrichtung des HTML Canvas beginnen . 2. Teile deine Arbeit auf Skillshare!: Wenn Sie an einem Kurs teilnehmen, ist es wirklich wichtig, dass Sie sich nicht angewöhnen diesen Kurs zu verfolgen , nur um eine weitere Vorlesung abzuhaken. Nehmen Sie sich die Zeit, jede Lektion zu bearbeiten, den Code, den Sie schreiben, zu überprüfen und darüber nachzudenken, wie Sie diese Lösungen selbst angehen könnten . Vor diesem Hintergrund ist dieser Kurs projektbezogen und bietet Ihnen die Möglichkeit, wirklich etwas Persönliches und Einzigartiges zu schaffen. Du musst dich nicht zu sehr verirren und vom Unterricht ablenken, und du kannst sogar einen Schritt zurücktreten , wenn du den Kurs beendet hast und danach zurückkommen und einige Projektänderungen vornehmen. Das gibt dir wirklich eine gute Gelegenheit, das Gelernte außerhalb des Unterrichts zu üben . Denken Sie auch daran, Ihr Projekt auch hier auf Skillshare zu teilen und nur ich werde es mir ansehen, aber es wird auch Kommilitonen inspirieren. Weitere Informationen zum Klassenprojekt findest du auf der Registerkarte Projekt und Ressourcen, der Registerkarte Projekt und Ressourcen wo du nicht nur dein Projekt hochladen kannst, sondern auch andere Klassenprojekte sehen kannst. In diesem Sinne freue ich mich darauf zu sehen, was Sie hier auf Skillshare erstellen und hochladen. 3. Das HTML Canvas einrichten: Da wir ein 2D-Spiel erstellen, brauchen wir eine Möglichkeit, verschiedene Formen und verschiedene Elemente zu erstellen und diese auf den Bildschirm zu platzieren. Um dies zu tun, werden wir die HTML5-Canvas intensiv nutzen . Canvas ist nur ein HTML-Element wie ein div oder sogar ein Bild. Es hat ein öffnendes und schließendes Tag und allein macht es eigentlich nichts. Aber sobald wir dies haben, können wir die Canvas-API verwenden, um Grafiken zu zeichnen. Wir können auch viel mehr für Fälle von Überbeanspruchung wie Foto-Manipulation tun , indem wir die Pixel und Animationen ändern , um nur einige zu nennen. Dieser Kurs wird sich mehr auf eine 2D-Grafik konzentrieren. Viele andere APIs und Bibliotheken stehen ebenfalls zur Verfügung, um 3D-Funktionen zu handhaben. Um auf diese 2D-Funktionen zuzugreifen, verfügt die Canvas-API über eine Schnittstelle namens CanvasRenderingContext2D. Das ist nicht etwas, was Sie sich merken müssen. Aber wissen Sie nur, dass wir aus diesem Grund mit JavaScript Zugriff auf die 2D-Zeichnungsfunktionen auf der Leinwand haben. Hier sehen Sie eine Auswahl einiger Eigenschaften und Methoden, auf die wir zugreifen , die es uns ermöglichen, auf die Leinwand zu zeichnen. Sie werden noch ein paar davon während des Kurses sehen. Gehen wir nun in den Texteditor und richten Sie Dinge mit einem neuen Projekt ein. Zuerst brauchen wir einen neuen Projektordner , um alle unsere Dateien darin zu speichern. Lass mich dieses Spiel nennen, alles, was du willst, aber ich möchte dieses eine Spiel nennen und „Enter“ drücken. Öffnen Sie Visual Studio-Code. Wenn Sie möchten, können Sie einen anderen Editor verwenden , wenn Sie möchten. Zieh das rüber. Dann brauchen wir zwei neue Dateien , um loszulegen. Der erste, den Sie entweder hier auf das Symbol Neue Datei klicken können, wird eine neue Datei erstellt. Ich nenne das die index.html. Die zweite Datei, die wir brauchen, wird für unser Skript sein , die script.js. Dies wird alle unsere Zeichenfunktionen in unserem Spielcode erledigen . Fangen wir in unserer index.html von vorne an. Hier hat Visual Studio Code eine praktische Verknüpfung namens html:5, die uns alle unsere grundlegende HTML-Struktur liefert. Der Titel ist derselbe. Wir brauchen nicht viel Inhalt innerhalb des Körperabschnitts, aber das erste, was wir brauchen, ist die Leinwand. Wie bereits erwähnt, hat die Leinwand die öffnenden und schließenden Tags. Wenn wir dies speichern und im Browser öffnen , sehen Sie noch keine Inhalte auf dem Bildschirm. Wenn wir die Pfadindexseite kopieren, fügen Sie diese ein, Sie sehen keinen Inhalt im Browser. Um die Leinwand tatsächlich zu sehen, müssen wir Dinge in unsere JavaScript-Datei zeichnen oder wir können auch etwas Styling hinzufügen hier auch etwas Styling hinzufügen, um unsere Leinwand sichtbarer zu machen. Bezug auf den Stil In Bezug auf den Stil möchten wir hier nur unsere Leinwand greifen und eine Hintergrundfarbe festlegen, um dies sichtbarer zu machen. Sie können dies in einer beliebigen Farbe machen , aber ich werde mich für einen rgb-Wert entscheiden. Das Rot von 61 und 59 für das Grün und das Blau. Dies wird uns diese dunklere Hintergrundfarbe geben. Wir können jetzt die Leinwand im Browser sehen. Sie können standardmäßig sehen, dass es sich um eine ziemlich kleine Leinwand handelt. Standardmäßig wird die Leinwand als 300 Pixel breit und 150 Pixel hoch gerendert . Wir können dies innerhalb unseres Skripts überschreiben. Um dies in der Mitte zu schaffen, können wir dies genauso tun, wie wir es mit anderen regulären HTML-Elementen tun würden . Stellen Sie zunächst den Anzeigetyp auf den Wert des Blocks ein. Dann können wir den Rand oben und unten auf Null setzen und dann links und rechts automatisch . Speichern und aktualisieren, und dies wird jetzt in der Mitte angezeigt, da ich den Platz links und rechts automatisch aufgeteilt habe. Das letzte, was Sie innerhalb unserer Indexseite direkt unter der Leinwand tun müssen, ist der Link unserer Skriptdatei. Platzieren Sie die Quelle, die auf unsere script.js verweist. Dann können wir in diese Datei wechseln, um etwas Inhalt hinzuzufügen. Das erste, was wir drinnen tun müssen ist, unser Canvas-Element tatsächlich zu greifen. Wir machen das genau wie bei jedem anderen HTML-Element. Wir haben Zugriff auf unsere Elemente mit Dingen wie QuerySelector, getElementById, getElementByClassName, und wir können dies innerhalb einer Konstante namens Canvas speichern . Für diesen Zugriff, das vollständige Dokument, verwende ich QuerySelector in unserem Canvas-Element übergeben wird. Jetzt speichert dies unseren Verweis auf unsere Elemente innerhalb dieser Variablen oder Konstante. Wir können jetzt direkt unten darauf zugreifen. Beginnend mit dem Überschreiben dieser Standardeinstellung Größe von 150 mal 300 Pixel. Schnapp dir unsere Leinwand. Wir können die Breite dieses Elements auf einen beliebigen Wert festlegen , den Sie möchten. Sagen wir 800. Als nächstes die Höhe von 400. Dies sollte jetzt im Browser aktualisiert werden. Das letzte, was wir innerhalb dieser Datei tun müssen , ist der Zugriff auf die 2D-Zeichnungsfunktionen der Leinwände mit GetContext. Wir können dies innerhalb einer Konstante namens ctx speichern, unsere Canvas-Elemente greifen und dann eine Methode namens getContext aufrufen. Übergeben Sie eine Reihe von 2D, um uns Zugriff auf die 2D-Zeichnungs-Features zu ermöglichen. Der konstante Name von ctx liegt bei uns, aber dies ist eine übliche Namenskonvention den Zugriff auf den Renderkontext, und diese Konstante kann jetzt verwendet werden um bei Bedarf auf die Leinwand zu zeichnen. Wir werden dies während dieses Kurses reichlich nutzen. Diese Leinwand ist jetzt auch für uns bereit zu zeichnen. Aber kurz bevor wir dies tun, werden wir im kommenden Video einen Blick darauf werfen, wie wir mit Rastern und Koordinaten arbeiten können, was uns wirklich helfen wird die Platzierungen unserer Objekte auf die Leinwand. 4. Raster und Co-Ordinates: Wir werden uns nicht zu weit vom Canvas zurückziehen, wenn wir zuerst einige grundlegende Koordinaten nicht verstehen. Einige davon verstehen Sie vielleicht schon, und wir müssen nicht zu tief gehen, aber wenn nicht, werden wir jetzt eine kurze Zusammenfassung machen. Wenn wir es auf den Canvas oder in die meisten 2D-Gittersysteme zeichnen , haben wir zwei Richtungen, die wir kennen müssen. Dies ist die X- und die Y-Achse, x ist horizontal von links nach rechts und y ist von oben nach unten vertikal. heißt, wenn Sie die obere linke Ecke dieses Gitters, x und y, suchen möchten , werden beide Null sein, aber was ist mit so etwas wie diesem Quadrat mit vielen Formen wie diesem? Obwohl es mehrere Rasterräume beansprucht, ist die Startposition oben links. Hier haben wir diesen roten Punkt. Von Anfang an oben links in diesem Raster werden wir über drei Leerzeichen auf der X-Achse und zwei Leerzeichen auf der Y-Achse hinunter gehen , was uns unsere Ausgangsposition gibt. Sobald wir unsere Ausgangsposition in der Ecke haben , können wir dann die Höhe und Breite jeder gewünschten Form einstellen . Das ist alles, was Sie wirklich wissen müssen, um loszulegen. Wir können dann die Größe der Grafik festlegen und andere Dinge tun, wenn wir sie erstellen. Das ist es, was wir als Nächstes haben werden. 5. Zeichnen von der Leinwand: Um beim Zeichnen auf die Leinwand zu helfen, habe ich einen Download erstellt, den Sie während dieses Kurses und auch in Zukunft verwenden können. Alles, was Sie tun müssen, ist zu diesem Link zu gehen, den Sie auf dem Bildschirm sehen, die PDF-Datei herunterladen und diese an einem sicheren Ort aufbewahren können. Lasst uns nun in unser Drehbuch einsteigen und einen Blick darauf werfen, wie wir einige davon nutzen können. Im Koordinatenvideo haben wir uns ein Beispiel für das Zeichnen eines Quadrats angesehen. Fangen wir damit an. Beachten Sie auch, dass die Quadrate und Rechtecke dieselbe Zeichnungsmethode verwenden. Wir haben gerade die Breite oder die Höhenwerte geändert Um ein Rechteck oder ein Quadrat mit der Leinwand zu zeichnen, müssen wir zuerst auf unsere Kontextvariable zugreifen, also ctx, und dies hat eine Methode verfügbar mit dem Namen FillRect. Dies füllt ein Rechteck mit einer Volltonfarbe oder sogar so etwas wie einem Farbverlauf. Wir werden verschiedene Werte für das 4. Jahr analysieren. Genau wie wir es zuvor mit dem Koordinatenvideo angesehen haben , die ersten beiden Werte der Ort, an dem wir dieses Rechteck platzieren möchten. Da dies auf der linken oberen Seite des Rechtecks oder Quadrats basiert , möchte ich dieses Beispiel beginnen indem ich dies oben links zeige. Die linke oben wird x, 0 und y, 0 sein. Dann analysieren wir die Breite und die Höhe, die die Form haben soll. Um dies zu einem Quadrat zu machen, können wir einige gleichmäßige Werte wie 100 analysieren. Dies wird oben links auf unserer Leinwand ein Quadrat von 100 mal 100 Pixel platzieren . Wir können dies auch über die X-Achse oder die Y-Achse schieben, jeden Wert, den wir wollen. Wenn wir die Y-Achse auf 50 ändern, wird dies die Leinwand weiter nach unten schieben. Neben der FillRect-Methode können wir dies auch als Strich ändern, also strokeRect. Anstatt eine einfarbige Farbe zu füllen , wie wir es sehen, wird der Strich einen Umriss um die Form legen. Dies gibt uns einen Umriss eines Rechtecks oder eines Quadrats. Für die meisten Dinge, die wir auf die Leinwand zeichnen, haben wir eine Strich- oder eine Fülle-Alternative. Ich werde das einfach ändern , um voll zu sein. Wir können auch ein Rechteck erstellen, indem wir entweder die Höhe oder die Breite ändern. Wenn wir dies zum Beispiel auf 200 ändern, wird uns dies ein Rechteck geben. Standardmäßig haben wir diese einfarbige schwarze Farbe. Wir können dies ändern, indem wir auf eine Eigenschaft in diesem Kontext namens FillStyle direkt über FillRect zugreifen diesem Kontext namens FillStyle und erneut auf unseren Kontext zugreifen, wie wir es mit all diesen Zeichnungs-Features tun werden . Wir können auf die Eigenschaft namens FillStyle zugreifen. FillStyle wird gleich einer Zeichenfolge sein und diese auf eine Farbe wie Rot setzen. Wenn wir den Browser aktualisieren, wird nun die Hintergrundfarbe aktualisiert. Wenn wir StrokeRect anstelle von fill verwenden würden , genau wie wir es zuvor gesehen haben , müssten wir dies auch aktualisieren, um StrokeStyle zu entsprechen. Dies ändert die Umrissfarbe in Rot. Machen wir diese beiden Änderungen einfach rückgängig und lassen Sie es als Füllung. Wie zu erwarten, werden diese Rechtecke innerhalb unseres Spiels nützlich sein . Wir könnten sie benutzen , um den Spieler und auch das Paddel des Computers zu zeichnen , das verwendet wird, um den Ball zu schlagen. Lass uns das mal ausprobieren, beginnend damit die Spieler auf der linken Seite rüber paddeln. Da wir eine Leinwand mit einer Höhe von 400 Pixel haben, können wir zunächst diese in die Mitte stellen, indem den Y-Wert auf 200 ändern. die Breite der Leinwand Lassen Sie uns die Breite der Leinwand auf einen Wert von acht und die Höhe von 80 einstellen . Aktualisieren. Man würde erwarten, dass das Paddel in der Mitte liegt, da wir diesen Y-Wert auf 200 eingestellt haben, was der Hälfte der Höhe entspricht. Aber wie wir bereits erfahren haben, die Ausgangsposition der X- und Y-Koordinaten befindet sich die Ausgangsposition der X- und Y-Koordinaten in der oberen linken Position unserer Form, was bedeutet, dass sich die Oberseite der Form in der Mitte der Leinwand und nicht in der Mitte unseres Rechtecks. Hier müssen wir anfangen, genauer über Dinge nachzudenken . Damit sich das Paddel korrekt in der Mitte der Leinwand befindet, müssen wir nun die Hälfte der Höhe des Paddels abziehen. Da wir wissen, dass die Höhe des Paddels 80 Pixel beträgt, könnten wir 40 von der Ausgangsposition abziehen. Dies funktioniert, aber eine bessere Option wäre es, diese Werte zu ändern , um Variablen zu verwenden. Die Variablen würden dann verwendet, um diese Berechnung für uns durchzuführen, und es wäre auch in Zukunft nützlich , wenn wir einen dieser Werte ändern würden. Nur beides können wir einige Variablen erstellen. Die erste ist die Paddelbreite, die dieselben Werte verwendet, also die Breite von acht Pixeln. Dann ist der zweite für die Paddelhöhe. Die Paddelhöhe beträgt 80 Pixel, genau wie wir es bereits getan haben. Dann können wir diese in unserer FillRect-Methode nutzen. Die Paddelbreite, auch die Höhe, und das sollte immer noch genau gleich funktionieren. Aber anstatt diesen Wert von 160 fest zu codieren, werden wir dies jetzt mit JavaScript berechnen. Wir können die Leinwandhöhe, die derzeit 400 Pixel beträgt, greifen und diese durch zwei teilen, um das Zentrum zu erhalten , das uns derzeit den Wert von 200 gibt. Aber wie wir wissen, werden 200 dies nicht in die Mitte der Leinwand legen. Wir müssen auch die Hälfte der Paddelhöhe abziehen, also canvas.height geteilt durch 2. Ich nehme auch die Paddelhöhe geteilt durch zwei weg. Was wir hier haben, ist genau das Gleiche wie zuvor. Wir haben den Wert von 200, zum Mitnehmen 40. Dies ist genau das Gleiche wie zuvor, verwendet jedoch Variablen. Speichern und aktualisieren. Nun, für das Paddel des Computers, das rechts vorbei sein wird, und das sollte alles ziemlich ähnlich aussehen, müssen wir nur die x-Position ändern , um rechts vorbei zu sein. Wir können den FillStyle auch in eine andere Farbe ändern. Wenn Sie nach unten gehen, wird der gesamte Code von nun an eine andere Farbe haben, indem Sie den FillStyle ändern. Lass uns blau gehen. Dann benutzen wir Ctx.FillRect. Wie bereits erwähnt, besteht der einzige Unterschied zwischen dem Paddel der Spieler und dem Paddel des Computers darin, dass wir dies auf die rechte Seite schieben wollen . Das Spieler-Paddel hat die x-Startposition von Null, die auf der linken Seite vorbei ist. Was wir für die Version des Computers tun möchten , ist, dies auf der rechten Seite zu platzieren , indem wir auf die canvas.width zugreifen, die derzeit 800 entspricht. Da diese Ausgangsposition jedoch oben links vom Rechteck basiert , würde dies tatsächlich vom Rand der Leinwand abschieben. Was wir tun müssen, ist, dies wieder zu erhöhen, indem wir die Paddelbreite abziehen. Die letzten drei Werte sind genau die gleichen wie oben. Das wird in der Mitte beginnen. Wir können dies verwenden, und die Breite und die Höhe des Paddels wurden ebenfalls eingestellt. Schnappen Sie sich alle drei, fügen Sie diese kurz nach dem Komma lassen Sie uns zwei Paddel auf dem Bildschirm liegen. Das nächste, was wir zeichnen müssen, ist ein Ball. Möglicherweise erwarten Sie eine Methode namens FillCircle oder etwas in dieser Richtung. Für Kreise verwenden wir jedoch eine Methode namens arc. erneut im Kontext Rufen Sie erneut im Kontext die Arc-Methode auf. Dies wird zum Erstellen eines Bogens oder einer Kurve verwendet. Wir können einen Kreis bilden, indem wir diese Kurve rundum zurück in die Ausgangsposition drehen diese Kurve rundum zurück . Im Gegensatz zu einem Rechteck hat die Form, da ein Bogen gekrümmt ist , keine obere Ecke, um ihn zu lokalisieren. Stattdessen lokalisieren wir es im Zentrum. Um es in die Mitte der Leinwand zu legen, könnten wir so etwas tun. Wir könnten auf die canvas.width dividiert durch 2 zugreifen. Dies platziert dies in die Mitte der X-Achse. Dann auch das Gleiche für die Höhe. Wir sind jedoch noch nicht fertig. Als nächstes kommt der Kreisradius, der die Bemaßung von der Mitte des Kreises bis zur äußersten Kante ist . Grundsätzlich die halbe Breite des Kreises. Platzieren wir es in 50, getrennt durch ein Komma. Der nächste Wert im Uhrzeigersinn ist der Start- und Endwinkel. Um dies effektiv senkrecht um 12:00 Uhr zu starten, beginnen wir mit der Position von Null. Damit die Endposition dies rundum drehen und einen Kreis erstellen kann, müssen wir diesen um 360 Grad drehen. Bei Verwendung der Bogenmethode erfolgt diese Rotation jedoch im Bogenmaß und nicht in Grad. Das Äquivalent von 360 Grad im Bogenmaß beträgt das 2-fache Math.PI. So können wir dies mit JavaScript tun. Wenn wir dies speichern und den Browser aktualisieren, sehen wir derzeit keinen Kreis auf der Leinwand. Wir sehen unseren Kreis noch nicht auf der Leinwand, denn zuerst müssen wir erklären, ob dieser Kreis eine Füllung oder ein Strich sein soll. Wir können das mit ctx.fill machen. Dies ist eine Methode, also brauchen wir die Klammern kurz danach. Aktualisieren. Dies wird unseren Kreis nun mit einer festen Hintergrundfarbe füllen. Wie zu erwarten, könnten wir die Strichmethode auch verwenden , um uns den Umriss unseres Kreises zu geben. Ich behalte das als Füllung. Ändern Sie auch die Füllfarbe direkt oben mit FillStyle und legen Sie diese auf Grau fest. Da Math.PI 2 mal ein voller Kreis ist, können Sie wahrscheinlich vermuten, dass die Hälfte dieses Wertes ein Halbkreis ist, also können wir einfach Math.PI sagen, anstatt ihn um zwei mal zu messen. Dies wird ein Halbkreis sein. Wenn Sie möchten, dass dies eine Linie ist, können Sie dies in einen Strich ändern. Sie könnten auch den Wert von Math.PI reduzieren oder erhöhen. Wenn wir den Wert von Math.Pi durch 2 teilen, wird uns dies einen Viertelkreis geben. Wie Sie sich vorstellen können, ist dieser Bogen eine ziemlich vielseitige Methode. Aber da wir einen Ball brauchen, werde ich dies wieder einstellen, um 2 mal Math.Pi zu sein , genau wie wir es zuvor hatten. Wir können dies auch in eine Füllfarbe und auch einen kleineren Kugelradius von 10 Pixeln ändern . Dies ist nur ein erster grundlegender Blick auf das Zeichnen auf die Leinwand. Wie zu erwarten, gibt es noch viel mehr zu lernen und viele weitere Dinge, die Sie tun können. Wir werden uns einige davon im kommenden Video ansehen. 6. Text, Linien und Pfade: dem vorherigen Video fortfahren, werden wir nun einige weitere Techniken entdecken , mit denen wir auf den Canvas zeichnen, um einige Linien und auch etwas Text zu zeichnen. Das wird sehr praktisch für unser Spiel sein. Ich beginne damit, Texte auf die Leinwand zu zeichnen , die verwendet werden, um Punktzahl des Benutzers zu zeichnen und den Benutzer dazu aufzufordern, das Spiel zu beginnen. Die Zeichnungstexte auf der Leinwand haben wir sowohl einen Strichtext, auch einen Umriss und den FillText oder eine Volltonfarbe. Fangen wir ganz unten in unserem Drehbuch an. Greifen Sie auf den Kontext zu und wir beginnen mit FillText. Für FillText müssen wir als erstes eine Zeichenfolge hinzufügen, die der Text ist, den wir anzeigen möchten, also hey, gefolgt von den X- und Y-Positionen, an denen wir dies platzieren möchten. Lass uns 150 gehen. Speichern und aktualisieren. Wir können diesen kleinen Text fast auf der Leinwand sehen , aber er ist wirklich schwer zu erkennen, da die Standardgröße 10 Pixel mit einer serifenlosen Schriftart beträgt . Aber das können wir natürlich in unserem JavaScript ändern . Lassen Sie uns zunächst den FillStyle so ändern, dass er einer beliebigen Farbe wie Rot entspricht und auch die Größe und auch die Schriftfamilie ändern. Wir können auf ctx oder font zugreifen. Stellen Sie dies auf eine Zeichenfolge ein. Dies nimmt genau die gleiche Syntax wie mit der CSS on -Eigenschaft an, damit wir eine Zeichenfolge der Pixelgröße übergeben können. Lass uns für 30 gehen und dann die Schriftfamilie von Helvetica. Aktualisieren und dies wird wirksam. Was schön wäre, ist die Punktzahl des Spielers auf beiden Seiten des Canvas angezeigt wird. Wenn wir die Punktzahl des Spielers in der Mitte der linken Hälfte und den Computerwert in der Mitte der rechten Hälfte hätten der linken Hälfte und . Um dies für die Punktzahl des Spielers zu simulieren, müssen wir uns effektiv in ein Viertel der Breite des Canvas drängen . Um eine Punktzahl zu simulieren, können wir einfach einen beliebigen Wert darin platzieren , z. B. drei, und schieben dann über ein Viertel der Breite. Wir können zuerst die Canvas, diese Breite, greifen und diese durch 4 teilen. Der Computer-Score, das muss drei Viertel des Weges über den Canvas sein, und wir können dies duplizieren . Ändere den Punktestand vorerst. Aber anstatt den Canvas durch 4 zu teilen, multiplizieren wir dies mit 0,75 schieben unseren Text drei Viertel des Weges über die Leinwand. Schließlich können wir diese beiden Werte auch in Variablen speichern , damit wir darauf zugreifen und später im Kurs verwenden können . Zurück an die Spitze, indem wir LET verwenden, damit wir diese im Laufe des Spiels aktualisieren können. Die erste Variable ist die Punktzahl des Spielers. Wir haben einen Anfangswert von 0, gefolgt von unserem Computer-Score. Diese Variablen können jetzt innerhalb unserer FillText-Methode verwendet werden . Entferne den fest codierten Wert, und dies ist die Punktzahl des Spielers. Der zweite ist der Computer-Score. Etwas anderes, das Canvas uns gibt, ist die Fähigkeit, mit Linien zu zeichnen. Es stehen zwei nützliche Methoden zur Verfügung, die als Verschiebewerkzeug und Linienwerkzeug bezeichnet werden. Werfen wir einen Blick auf die. Ctx.moveTo und Ctx.LineTo. Der erste von move to wird verwendet, um die Ausgangsposition zu wechseln und dann die Linie zu ziehen, ist das, was tatsächlich eine Linie auf dem Canvas zu der Endposition zeichnet, die wir gesetzt haben. Bewegen Sie sich zu, als würde man den Stift von etwas Papier abheben und an eine bestimmte Position bewegen. Line to wird verwendet, um die Linie tatsächlich zu zeichnen. Wofür ich das verwenden werde, ist, eine Mittellinie vertikal auf dem Canvas und auch auf den Mittelkreis zu zeichnen . Beginnen wir zuerst mit dieser vertikalen Linie und wir müssen zuerst die Position des Stiftes bewegen , um sich in der Mitte der Leinwand und oben zu befinden. Die Werte dafür sind zuallererst für x die Hälfte der Breite des Canvas und die y-Position ist 0, da wir dies ganz oben behalten möchten. Bewegen Sie sich abhängig, um gerade hier in dieser Position zu sein. Jetzt müssen wir die Line-to-Methode verwenden. Zeichnen Sie tatsächlich eine Linie zur Endposition, die sich unten befindet und an der Endposition verläuft, so dass diese immer noch in der Mitte des Canvas liegt , sodass wir die Canvas-Breite geteilt durch 2 und Die endgültige Y-Position ist unten unten. Dies ist die Canvas.Height. Dies wird dann festlegen, wohin wir unsere Linie ziehen möchten aber tatsächlich Orte auf dem Canvas, wir müssen die Strichmethode verwenden, also ctx.stroke und es gibt eine Linie von oben nach unten. Das ist wirklich gut, aber wenn wir genau hinschauen, haben wir auch eine zusätzliche unerwünschte Linie um diesen Ball herum. Dies geschieht, weil wir derzeit keine Trennung zwischen all diesen Canvas-Pfaden und den von uns erstellten Grafiken haben. Zum Beispiel haben wir direkt oben einen Kreis mit der Filmmethode gezeichnet. Wir haben dies gezeichnet, wie Sie es bei dieser grauen Farbe erwarten würden, aber dann läuft der Code weiter aber dann läuft der Code weiter nach unten und er zeichnet auch denselben Kreis mit der Strichmethode. Deshalb hat der Ball eine Füllung und auch einen Umriss vom Schlag bis. In diesem Fall können wir jeden dieser Abschnitte mit einer Methode namens begin path trennen . Wir nennen das direkt oberhalb unseres Zeilenabschnitts mit ctx.beginpath. Der Begin-Pfad wird alle oben vorhandenen Pfade effektiv löschen oben vorhandenen Pfade und von dieser Linie aus neu beginnen. Speichern und aktualisieren und jetzt wurde unsere Linie aus dem Kreis entfernt, wobei nur die vertikale Linie übrig bleibt, die wir beabsichtigt haben, sowie diese durchgezogene Linie. Wir können dies auch ändern , um eine gestrichelte Linie zu sein. Wir können dies tun, kurz bevor wir unsere Linie mit ctx.setlinedash ziehen. Set line dash ist eine Methode, die ein Array innerhalb dieses JavaScript-Arrays aufnimmt . Wir legen die Größe so fest, dass sowohl die Bindestriche als auch die Lücken zwischen jedem einzelnen von ihnen liegen. Wenn wir so etwas gemacht haben, 10, 20, 20 und 30, werden alle Werte für unsere Bindestriche und Leerzeichen festgelegt , sodass wir die Größe des ersten Bindestrichs, die Größe des ersten Leerzeichenraums, den Größe des zweiten Bindestrichs, die Größe des zweiten Leerzeichens und dann die Größe des dritten Bindestrichs und dann wird er bis zum Ende der Zeile wiederholt. Zehn Pixel für die erste Zeile und dann 10 Pixel für die erste Lücke und dann gehen wir weiter zu 20 und dann 30. Um dies einfach zu halten, gebe ich nur einen einzelnen Wert von 6 ein und dies wird sicherstellen, dass jedes unserer Leerzeichen und auch unsere Bindestriche gleich groß ist . Das letzte, was zu zeichnen ist, wird ein Mittelkreis sein. Wir wissen, wie man einen Kreis mit der Bogenmethode zeichnet. Aber dieses Mal setzen wir auch eine gestrichelte Linie ganz nach unten und beginnen einen neuen Abschnitt mit ctx.beginpath. Für unseren Kreis, ctx.arc. Genau wie unsere Startkugelposition müssen wir diese mit Leinwand in die Mitte der Leinwand platzieren Breite geteilt durch 2 und auch für die Höhe gleich. Schnapp dir das, füge sie ein. Der dritte Wert ist der Radius und da wir einen Ball von 10 haben, lassen Sie uns dies zu einem Wert von 20 machen. Für den Kreis ist die Ausgangsposition 0 und ein voller Kreis ist das 2-fache math.pi. Zeichnen Sie tatsächlich den Kreis, den Sie benötigen, um die Strichmethode aufzurufen und unseren Mittelkreis jetzt auf der Leinwand zu belassen . Dies ist das meiste, was wir für unsere Spiele bei Zeichnungsfunktionen benötigen , und der große Teil bei der Verwendung solcher Variablen ist, dass wir diese Werte in Zukunft aktualisieren können , um unsere Objekte auf dem Canvas zu verschieben. 7. Schleife: Looping wird ein wirklich wichtiger Teil sein, um Dinge in unser Spiel zu bewegen. Wenn Sie derzeit darüber nachdenken, werden wir derzeit Dinge wie einen Ball und auch die Pedale auf den Bildschirm gezogen . Aber was wir tun müssen, ist, diese Werte zu aktualisieren , um diese in eine andere Richtung zu bewegen, und dann müssen wir dies mit einer Schleife kontinuierlich neu zeichnen und wiederholen. Das werden wir uns jetzt mal ansehen. Unten in unserem Skript müssen Sie zunächst eine Funktion erstellen , die Sie wiederholt aufrufen möchten. Du kannst dem einen beliebigen Namen deiner Wahl geben, ich bleibe bei der Schleife. Der Zweck dieser Funktion besteht darin, wiederholt Autografiken wie Ball und Paddel zu zeichnen Autografiken wie Ball und , nachdem sie sich bewegt haben. Um es aufzurufen, können wir eine JavaScript-Methode namens setInterval verwenden . setInterval wiederholt unsere Loop-Funktion nach einer Reihe von Millisekunden. Wir nennen das ganz unten, das wird zwei Dinge aufnehmen, das erste ist das, was wir wiederholen wollen, und in unserem Fall ist es unsere Loop-Funktion. Wir werden dies weitergeben, gefolgt von einer Zeitverzögerung in Millisekunden. Lassen Sie uns dies derzeit auf 15 setzen, und Sie können dies für das langsamere Spiel erhöhen und dies für ein schnelleres Spiel reduzieren. Diese Loop-Funktion wird schließlich viele Teile unseres Codes wiederholen , die wir oben haben, aber jetzt legen wir uns in ein einfaches Konsolenprotokoll, damit wir überprüfen können, dass dies funktioniert. Also jeder Text, der hier drin ist, speichern Sie dies, und jetzt können wir in die Konsole gehen und überprüfen, ob und jetzt können wir in die Konsole gehen und überprüfen, ob unser setInterval unsere Funktion aufruft, inspizieren, in die Konsole springen und jetzt, wenn wir aktualisieren, wir können sehen, dass dies alle 15 Millisekunden aufgerufen wird. Lassen Sie uns damit beginnen, dieses Konsolenprotokoll durch unseren Ball zu ersetzen . Um unseren Ball zu zeichnen, könnten wir den Code schneiden und einfügen, mit dem wir unseren Ball zeichnen, der die ctx.arc-Methode ist. Oder stattdessen könnten wir dies in eine Funktion umwickeln und diese direkt aufrufen. Gleich darüber wird eine neue Funktion namens DrawBall erstellt. Dies wird unseren gesamten Code direkt unten umhüllen. Öffnen Sie die geschweiften Klammern genau so, und dann können wir diese ausschneiden und einfügen und direkt in unsere Funktion verschieben . Jetzt können wir unsere DrawBall-Funktion von innerhalb unserer Schleife aufrufen , das Konsolenprotokoll ersetzen , unsere DrawBall-Funktion übergeben und diese alle 15 Millisekunden aufrufen und den Browser aktualisieren. Ein paar Dinge, die Sie hier beachten sollten, das erste, was Sie bemerken werden, ist, dass unser Ball jetzt zu groß ist. Wir scheinen einen Konflikt zwischen den Pfaden zu haben , die wir erneut zeichnen, der mit CTX.BeginPath behoben werden kann. Ich werde dies innerhalb unserer DrawBall-Funktion hinzufügen, aktualisieren und dies behebt jetzt unser erstes Problem. Die nächste Ausgabe ist, dass sich der Ball tatsächlich noch nicht bewegt. Dies ist zu erwarten, denn obwohl wir diesen Ball wiederholt alle 15 Millisekunden gezogen haben, haben wir ihn immer an derselben Stelle gezeichnet. In der DrawBall-Funktion haben wir dies immer in die Mitte gezogen, und wir können diese beiden Werte mit einigen Variablen ändern , die wir aktualisieren können. Für die Breite, die die Exposition ist, ersetzen wir diese durch BallX und BallY für die Y-Position. Wir möchten immer noch, dass sich diese beiden Variablen zunächst in der Mitte der Leinwand befinden. Zuallererst, BallX, ist es gleich der Canvas-Breite geteilt durch 2. Platzieren Sie dies zunächst in die Mitte, und dann teilen wir für Bally direkt darunter die Höhe der Leinwand durch 2. Wie wir erwarten würden, wenn wir speichern und aktualisieren, sehen wir noch keine Updates , da wir die Werte von BallX und Bally jedes Mal aktualisieren müssen die Werte von BallX und Bally jedes Mal aktualisieren , wenn der Frame wiederholt wurde. Wir können dies in unserer DrawBall-Funktion wieder tun, nachdem dies gezeichnet wurde. Sobald wir zur nächsten Schleife übergehen, aktualisieren wir den Wert dieser beiden Variablen plus 2. Außerdem addieren wir den Wert von zwei zu unserer BallX-Variablen und aktualisieren dann die Variable, Bally ist gleich. Wir werden das kurz halten, da wir nicht so viele Probleme auf der Y-Achse haben , also ist der Wert von einer in Ordnung. Aktualisieren Sie das. Wir werden jetzt sehen, wie der Ball auf der Leinwand unterwegs ist. Dies wird jetzt aktualisiert, aber wir haben immer noch diese solide Spur auf der Leinwand, da die vorherige Ballposition entfernt werden muss. Wir können dies mit einer Canvas-Methode namens ClearRect beheben, die alle vorhandenen Zeichnungen von der Leinwand löscht , bevor wir unseren Ball in unsere Schleife neu zeichnen, und dies am Anfang platzieren, kurz bevor wir wiederholt, um unsere Funktion aufzurufen ClearRect zu übergeben, das im Kontext verfügbar ist. Wenn wir die Möglichkeit haben möchten, nur Kleinteile oder einen bestimmten Bereich der Leinwand zu löschen , löschen wir in unserem Fall die gesamte Leinwand. Zuerst gehen wir an der Startposition ein, die oben links ist, was die Koordinate von 0, 0 ist , und dann löschen wir die volle Breite und die volle Höhe. Zunächst einmal, indem Sie canvas.width, getrennt durch ein Komma, canvas.height, übergeben und diese erneut durch kleine Werte ersetzen. Wenn Sie nur einen kleinen Teil der Leinwand zum Browser entfernen möchten , bewegt sich der Ball nun wie erwartet, ohne diese solide Spur zu verlassen. Geh zum Ball, bewegt sich jetzt wie erwartet, und wir sehen jetzt nichts anderes auf der Leinwand, da wir es mit ClearRect gelöscht haben. Wir löschen die Leinwand jedes Mal, wir rufen diese Loop-Funktion auf. Was wir tun müssen, ist, unsere Zeichnungsfunktionen von oben zu greifen und diese auch in unsere Schleife zu verschieben. Der zusätzliche Vorteil all dieser Zeichnungsfunktionen, die in der Schleife sind, besteht darin, dass wir sehr bald die Paddelposition mit einer Tastatur aktualisieren werden, und dies wird auch die Position aktualisieren auf der Leinwand auf jeder Schleife. Aber im Moment gehen wir dorthin, wo wir unsere Formen zeichnen, und wir werden dasselbe tun wie mit dem Ball, nämlich den gesamten relevanten Code in eine eigenständige Funktion zu wickeln . Es kann also von innerhalb unserer Schleife aufgerufen werden. Erstens war die Zeichnungsfunktion das Spieler-Paddel, das sich hier direkt unter unseren Variablen befindet. Schneiden Sie dies aus und erstellen Sie eine neue Funktion namens DrawPlayerPaddle, fügen Sie diese wieder in unsere Funktion ein. Der zweite ist das Zeichnen eines Computer-Paddels, und das ist für alle blauen Bereiche. Schneiden Sie dies aus und erstellen Sie unsere neue Funktion namens DrawComputerPaddle. Fügen Sie wieder unseren Code ein, DrawBall-Funktion ist immer noch vorhanden. Der nächste war FiltText, und dies ist, um die Punktzahl auf die Leinwand zu zeichnen. Schneiden Sie dies also aus, erstellen Sie eine neue Funktion namens DrawScore und fügen Sie diese dann wieder in den Körper ein. Die nächsten beiden Abschnitte dienen zum Zeichnen unserer Linien auf die Leinwand. Dieser war für die Mittellinie und auch für den Kreis in der Mitte. Wir werden beide in eine einzige Funktion namens DrawCanvas einfügen. Füge das ein. Jetzt können wir all diese neuen Funktionen aus unserer Schleife aufrufen : DrawPlayerPaddle, das war die erste, gefolgt von DrawComputerPaddle, DrawScore und schließlich DrawCanvas. Probieren wir das aus, sehen wir uns den Browser an. Nachdem wir unser Rechteck zusammen mit dem Ball gelöscht haben, funktionieren jetzt alle übrigen Zeichnungsfunktionen. Wie zu erwarten, ist dies ein wirklich wichtiger Teil unseres Spiels und ein großer Schritt in die richtige Richtung. Als nächstes in der kommenden Lektion werden wir uns ansehen, wie wir die Tastatur benutzen können , um die Spieler auf und ab zum Ball zu bewegen . 8. Moving Objekte mit der Tastatur: Wir kommen jetzt zu dem lustigen Teil, in dem wir Dinge auf der Leinwand mit Steuerelementen wie der Maus oder der Tastatur tatsächlich bewegen können der Leinwand mit Steuerelementen . Ziel dieses Videos ist es, zu hören, wenn der Benutzer die - oder Abwärtstaste auf der Tastatur drückt, dann bewegen wir das Benutzerpaddel. All dies können wir mit regulärem JavaScript machen. Im Moment haben wir diesen Spieler auf der linken Seite rüber paddeln. Wenn wir zur Drawplayer-Paddle-Funktion gehen , die dies steuert, können wir genau hier mit der Position der X- und Y-Koordinaten sehen . Obwohl dies auf der linken Seite vorbei ist weil wir den x-Wert auf 0 haben und der Y-Wert in der Mitte liegt . Um unser Paddel mit der Tastatur zu aktualisieren, müssen wir diesen Y-Wert durch eine Variable ersetzen. Um es in der Mitte und nicht oben links positioniert zu halten, können wir diese Haushöhe trotzdem geteilt durch 2 beibehalten. Die Canvas-Höhe geteilt durch 2 kann jedoch durch eine Variable ersetzt werden, die als Spielerposition bezeichnet wird. Eine Position muss ganz oben mit den restlichen Variablen erstellt werden . Wir verwenden let, da dies aktualisiert werden muss. Spiele die Position und setze diese gleich der Canvas-Höhe geteilt durch 2 ein. Zu Beginn lässt dies unseren Spieler wie zuvor in der Mitte des Canvas. Aber jetzt haben wir eine Variable , die wir aktualisieren können. Dies wird auch in jeder Schleife überprüft da wir unsere Funktion von unserer Schleife aus aufrufen. Mit dieser Variablen jetzt einrichten, können wir beginnen, nach Tastaturereignissen zu hören unsere Spielerposition zu verschieben. Unmittelbar darunter müssen wir mit addEventListener auf ein Tastaturereignis hören . Dies ist nur reguläres JavaScript Document.addEventListener. Wir werden uns die Veranstaltung eines Nutzers anhören . Das Ereignis, auf das wir hören möchten, ist eine Taste, die nach unten gedrückt wird, die dann eine Funktion auslöst , die ich MovePaddle aufrufe. Funktion movePaddle. Da dies kein Ereignis ist, müssen wir auf die Ereignisinformationen zugreifen, um genau herauszufinden, welche Taste der Benutzer gedrückt hat Wir müssen die Ereignisinformationen an unsere Funktion übergeben . , wir beginnen mit einem Konsolenprotokoll das den Wert von e übergibt. Wir können genau sehen, welche Ereignisinformationen wir für unser Key Down Event haben. Springe in die Konsole, aktualisiere es. Dies wird zunächst nichts tun , bis der Benutzer die Taste gedrückt hat. Beginnen wir mit der Taste nach oben, die dann alle Informationen von unseren Tastaturereignissen ausgibt . gibt es viele Informationen Hier gibt es viele Informationen, die wir nicht brauchen. Aber die Hauptsache , die Sie für dieses Projekt benötigen , ist diese Code-Eigenschaft. Sie können sehen, dass dies eine Reihe von Arrow Up ist. Wenn wir das jetzt schließen und den Pfeil nach unten drücken, ist der Code, den Sie für diesen benötigen, Pfeil nach unten. Wir können auf e.code zugreifen und prüfen, ob jeder davon dem Pfeil nach oben oder dem Pfeil nach unten entspricht, dann können wir den Wert der Spielerposition festlegen. Lassen Sie uns das Konsolenprotokoll entfernen da wir wissen, wonach wir jetzt suchen und ersetzen Sie dies durch eine JavaScript-Switch-Anweisung. Der Wert, mit dem wir prüfen möchten, wie wir gerade gesehen haben, ist e.code. Da wir jetzt nur die aktuelle Liste für den Pfeil nach oben oder den Pfeil nach unten sind, könnte dies durch eine if-else -Anweisung ersetzen , wenn Sie dies bevorzugen. Aber ich möchte eine Switch-Anweisung verwenden , damit wir diese später erweitern können , um das Spiel mit der Tastatur zu starten. Zu Beginn ist der erste Fall, auf den wir achten müssen, Arrow Up. Stellen Sie sicher, dass dies genau mit der Zeichenfolge übereinstimmt , wie wir es in der Konsole sehen. Jedes Wort beginnt mit einem Kapital. Wenn der Pfeil nach oben gedrückt wurde, muss die Spielerposition durch Abzug eines Wertes aktualisiert werden. Denn denken Sie daran, dass der Wert von y ganz oben 0 ist. Dies wird aktualisiert, wenn sich die Spielerposition nach unten bewegt und unsere Variable der Spielerposition übersteigt. Dafür verwenden wir den Subtraktionszuweisungsoperator , der unsere speziellen Werte wie 15 von unserem aktuellen Wert subtrahiert 15 von unserem aktuellen Wert und diese Variable dann erneut aktualisiert. Jeder unserer Fälle muss mit einer Break-Klausel befolgt werden . Brechen Sie aus unserer Switch-Anweisung wenn dieser Fall abgeglichen wird. Wir müssen auch nur einen Doppelpunkt hier drin platzieren. Unser zweiter Fall ist knapp unten. Dieser wird für den Fall von Arrow Down sein : Dieses Mal aktualisieren wir die Spielerposition mit dem Additionszuweisungsoperator , der 15 hinzufügt, und weisen dann unsere neue neu zu Variable mit dem aktualisierten Wert. Wir brechen das aus, wenn das stimmt. Da unsere Spielerposition innerhalb unserer Funktion verwendet wird , wenn wir das Paddel zeichnen, sollten wir dies jetzt aktualisieren können , wenn wir die Auf- und Abwärtstasten drücken. Wir können auch alles andere auf der Leinwand mit der gleichen Technik bewegen . In einem zukünftigen Video werden wir uns ansehen, wie das Paddel des Computers nach oben oder unten bewegt werden kann, aber dieses muss automatisch erfolgen. Als Nächstes werden wir behandeln, wie mit dem Ball umzugehen ist, der von unseren Objekten abprallt. 9. Kollisionen erfassen und sprunghaft: Welche Art von Spiel hätten wir wenn der Ball nicht von den Seiten oder auch von den Paddeln abprallen würde? Nun, das ist schwierig , weil es etwas zu trainieren beinhaltet , da alle unsere aktuellen Koordinaten auf den Mittellinien von Dingen wie dem Ball und auch dem Paddel basieren den Mittellinien von Dingen wie . Aber wir werden unser Bestes tun , um die Dinge herauszufinden , und wir werden jetzt damit fortfahren . Wenn wir diese Draw-Ball-Funktion finden, wissen wir, dass diese beiden Codezeilen ganz am Ende dafür verantwortlich sind, unseren Ball zu bewegen. Jedes Mal, wenn der Ball auf die Leinwand gezogen wird, bewegen wir den Wert von Ball X und auch den Wert von Ball Y. Außerdem wissen wir, wie man die Richtung ändert. Wenn wir dies jetzt aktualisieren, wird dies in eine positive Richtung gehen. Wir können die Richtung auch ändern, indem wir einen dieser Werte in eine negative Zahl ändern. Dies wird die Grundlage sein, um von unseren Wänden und auch vom Paddel abzuprallen. Um dies zu tun, anstatt unsere fest codierten Werte genau so zu haben, aktualisieren wir diese Funktion, um stattdessen Variablen zu verwenden. Bewegen Sie x an die x-Position und bewegen Sie y in die y-Richtung. Dies wird die dynamische Aktualisierung dieser Werte wesentlich einfacher machen dynamische Aktualisierung dieser Werte wesentlich einfacher , sodass wir die Richtung bei einer Kollision umkehren können . Lassen Sie uns diese oben als Variablen einrichten. Bewegen Sie zuerst x, und behalten wir vorerst die gleichen fest codierten Werte , die wir zuvor hatten. Bewegen Sie y das war gleich eins. Sie können diese jedoch aktualisieren, um andere Werte zu haben, wenn Sie möchten. Auch eine weitere Variable für den Kugelradius , der ein Anfangswert von 10 ist. Wir werden das sehr brauchen, wenn wir die Kollisionen berechnen. Dies liegt daran, dass der Ball vom Mittelpunkt des Kreises aus positioniert ist , aber wenn er zum Beispiel nach oben kommt, müssen wir auch den Radius des Balls berücksichtigen. Wir können unsere Funktionen auch aktualisieren, um den Kugelradius direkt darunter zu nutzen. Zurück runter, um Ball zu zeichnen. Hier stellen wir den Kugelradius auf einige Pixel ein, oder wir können dies aktualisieren, um unsere Variable zu verwenden. Nun, weiter zur Funktion, um zu prüfen, ob eine Kollision vorliegt. Lassen Sie uns ganz unten direkt über unserer Schleife eine Funktion einrichten. Ich rufe meine Funktion collide auf. Dann wird diese Funktion dafür verantwortlich sein, vier verschiedene Dinge zu überprüfen. Das erste, was ist, oben und unten abzuprallen. Wir möchten auch überprüfen, ob links oder rechts von unserem Spiel Kontakt vorhanden ist , also müssen wir nach dem Ergebnis auf der X-Achse suchen. Dies gilt für beide Seiten. Wir möchten auch prüfen, ob es Kontakt mit dem Spieler-Paddel gibt. Das Gleiche gilt auch für das Paddel des Computers. Gut. Wir wissen jetzt, was wir innerhalb dieser Funktion tun wollen , und wir können dies direkt unter unserer Schleife aufrufen. Dies bedeutet, dass wir alle Kollisionspunkte an einem bestimmten Frame unserer Schleife überprüfen werden. Wir werden jedes Mal nach Kontakt suchen, wenn sich irgendetwas bewegt. Jetzt müssen wir innerhalb dieser Kollisionsfunktion etwas arbeiten . Kurz bevor wir anfangen, unsere vier Kontaktpunkte auszuarbeiten , ziehe ich einen temporären Ball auf die Leinwand. Wir können dies bewegen und sicherstellen, dass wir die richtigen Kontaktstellen haben. Zuallererst beginnen wir einen neuen Weg. Es stört keine anderen Zeichnungen. Der Füllstil. Du kannst diese Farbe machen, die du willst, nur damit es auffällt, ich werde mich für Lila entscheiden. Dann ctx.arc, um unseren Ball auf die Leinwand zu zeichnen. Jeder Ort für den Moment, jede zufällige Position ist in Ordnung, 10 Pixel auf dem X und Y wie im Ballradius. Um unseren Kreis zu machen, kann der Startwinkel Null und dann 2 mal Math.PI sein. Zeichnen Sie dies, das Letzte, was wir tun müssen, ist ctx.fill, save, und in der oberen Ecke unseres Bildschirms befindet sich ein Ball. Okay. Die ersten Kontaktpunkte, die wir überprüfen möchten, sind die Ober - und Unterseite der Leinwand. Beginnend mit dem Boden. Bewegen wir unseren temporären Ball nach unten auf der Leinwand und stellen sicher, dass wir den richtigen Kollisionspunkt haben . Die X-Achse spielt momentan keine Rolle, aber wir müssen die Y-Richtung ändern. Aber zuerst werden wir die Canvas.height übergeben , speichere das. Wie Sie sehen können, drückt dies dies vom Rand der Leinwand ab, also müssen wir diese Hälfte des Kugelradius zurückziehen. Wir haben dies bereits als Variable gespeichert, sodass wir dies von unserer Leinwandhöhe abziehen können. Da sind wir los. Dies ist der Kollisionspunkt auf der Unterseite der Leinwand, auf den wir achten möchten. Nun können wir dies in einer if-Anweisung nutzen. Wir wollen prüfen, ob etwas stimmt. Die Überprüfung, die Sie machen möchten, ist, ob der Ball y, der die Position auf dem Mittelpunkt des Balls ist, größer ist als die Ballposition, die wir gerade gezeichnet haben; wenn der Ball weiter gegangen ist nach unten als dieser aktuelle Punkt wird dann als außerhalb der Leinwand angesehen , und wir müssen dann die Richtung drehen. Kurz bevor wir das tun , testen wir, dies mit dem Konsolenprotokoll von hit bottom einwandfrei funktioniert . Springe in die Konsole und aktualisiere den Browser. Sobald der Kontaktpunkt an den unteren Rand der Leinwand gelangt oder erlischt, möchten wir unser Konsolenprotokoll hier ausführen lassen. Diesen Ball zu hüpfen ist ziemlich einfach. Derzeit, wenn das Spiel beginnt, geht der Ball in eine positive oder eine Abwärtsrichtung, aber wir können dies umkehren, indem wir dies in eine negative Zahl ändern , genau wie wir es zu Beginn dieses Videos gesehen haben. Jetzt, in diesem und da wir an der Y-Richtung arbeiten , können wir unser Konsolenprotokoll ersetzen, indem wir die Variable aktualisieren. Verschieben y, der aktuelle Standort, ist gleich einer negativen Version von move y was das Positive effektiv auf ein Negativ und ein Negativ zu einem positiven umkehren wird . Sparen wir uns das auf und probieren es aus. Aktualisieren Sie, und wir sollten einen Abprall von ganz unten sehen. Natürlich geht es immer noch der Ecke der rechten Seite der Leinwand, aber das ist in Ordnung. Wir können jetzt sehen, dass unser Bounce alles funktioniert. Gut. Jetzt müssen wir auch die Kollision oben auf der Leinwand berücksichtigen. In der if-Anweisung fügen wir eine oder Bedingung hinzu. Dieses Mal möchten wir prüfen, ob der Ball y-Standort nur den oberen Teil der Leinwand berührt. Wir wollen nicht prüfen, ob dies gleich Null ist , denn wenn dies aufgrund des Ballradius der Fall wäre , wäre dies halb und die Hälfte auf der Leinwand. Wir wollen auch den Ballradius abziehen. Wir prüfen, ob dies kleiner oder gleich Null ist. Wenn ja, sollte es von der Oberseite der Leinwand abprallen. Wenn wir den Browser neu laden, bewegt sich der Ball derzeit in eine Abwärtsrichtung. Aber zum Testen können wir die Y-Richtung bewegen, um eine negative Zahl zu sein, was dazu führt, dass sich der Ball in eine Aufwärtsrichtung bewegt. Dies ist die Grundlagen, wie wir einen Ball abprallen können. Es geht hauptsächlich darum, nur zu überprüfen, ob unsere Kontaktpunkte korrekt sind, und auch sicherzustellen, dass wir auch den Ballradius berücksichtigen . Wir werden nun eine Bedingung hinzufügen, um zu überprüfen, ob der Ball die linke oder rechte Seite unserer Leinwand trifft , und später erhöht dies die Punktzahl. Dieser wird alle auf dem Ball x Standort für die linke und rechte Seite unseres Spiels basieren. Gehe zurück zu unserer Funktion, die kollide ist. Dann wollen wir gerade unter unseren Kommentaren auch eine if-Erklärung abgeben. Zunächst einmal, um zu prüfen, ob der Ball auf der linken Seite kollidiert ist. Derzeit ist unser temporärer Ball genau dort, wo wir den Ansprechpartner haben wollen , der auf einen Wert von 10 eingestellt ist. Das funktioniert alles gut, da unser Kugelradius auf 10 eingestellt ist. Wir möchten prüfen, ob der in der Variable von Ball x gespeicherte Ort kleiner oder gleich dem Kugelradius ist. Wenn der Ball links dort ist , wo er jetzt ist, möchten wir dann eine Punktzahl an den Computer weitergeben. Wir bieten eine Möglichkeit, dies später zu tun, fügen Sie aber vorerst einfach ein Konsolenprotokoll mit dem Computer-Score ein. Darunter ein Else-if-Abschnitt. Dies wird für unseren Scheck sein um zu sehen, ob der Spieler erzielt hat , indem er den Ball auf die rechte Seite bewegt hat. Dafür passieren wir die Position von Ball x. Wir möchten sicherstellen , dass der Ball die rechte Seite der Leinwand berührt. Auch hier befindet sich die vertikale X-Position in der Mitte des Balls. Wir möchten auch prüfen, ob der Ball x plus der Kugelradius größer ist als gleich der vollen Breite unserer Leinwand. Wir können das mit der Leinwandbreite greifen. Platzieren Sie dann ein Konsolenprotokoll für den Spielerstand testen Sie dies in der Konsole. Es ist ein bisschen größer. Sie haben einen Tippfehler in Zeile 85. Das will einfach zusammen sein, kein Platz dazwischen. Probieren wir das jetzt aus. Wenn sich der Ball nach rechts bewegt, sehen wir, dass es einen Spielerstand gibt. Wenn wir ganz oben zu unserem x-Standort gehen, kann es nur eine negative Zahl sein. Wir können dann den Computer-Score testen. Los geht's. Das funktioniert jetzt alles wie erwartet. fangen die Dinge jetzt wirklich an Mit unserem Spiel fangen die Dinge jetzt wirklich an, Gestalt anzunehmen. Als nächstes schauen wir uns einen weiteren wichtigen Abschnitt an, darin besteht , den Ball von den sich bewegenden Paddeln abzuprallen. 10. Paddle: In ähnlicher Weise, um von den Seiten unserer Leinwand abzuprallen, müssen wir jetzt auch berücksichtigen dass der Ball auch unsere beweglichen Paddel trifft. Dies beinhaltet ein bisschen mehr Arbeit, da wir nicht nur den Ball berücksichtigen müssen, der die Vorderseite des Paddels trifft, sondern wir müssen auch überprüfen, ob sich die Ballposition zwischen der Ober- und Unterseite des paddeln auch. Beginnend mit dem Paddel unseres Spielers, um zu überprüfen, ob wir die Dinge richtig ausarbeiten, können wir diesen temporären Ball verwenden, diesen auf die Vorderseite des Paddels legen und überprüfen, ob wir den richtigen Kontaktpunkt haben. Springen Sie in die Collide-Funktion und oben haben wir diesen Bogen, der diesen temporären Ball erzeugt. Entfernen Sie diesen Wert und legen auf die Vorderseite des Paddels, wir müssen diesen auf der X-Achse, dem Kugelradius plus der Breite des Paddels, das in der Paddelbreitenvariablen gespeichert ist, bewegen dem Kugelradius plus der Breite des Paddels, das in der Paddelbreitenvariablen gespeichert ist . Aktualisieren und zuerst können wir sehen, wie sich dies bewegt, und um dies zu bestätigen, können wir dies in die Mitte verschieben , indem wir die Y-Achse gleich der Leinwandhöhe dividiert durch 2 anpassen . Da sind wir los. Jetzt haben wir die richtige Kontaktstelle für unser Paddel. Wir können diesen Kontaktpunkt jetzt verwenden, um zu prüfen, ob der Ball kleiner oder gleich diesem X-Wert ist. Auch hier haben wir eine if-Aussage wie diese eingerichtet. Gehe nach unten zu unserem Kommentar, der den Spieler-Paddel-Kontakt überprüft. Die if-Anweisung wird prüfen, ob die X-Position des Balls kleiner oder gleich der X-Position ist , die wir gerade eingestellt haben, nämlich der Kugelradius plus die Paddelbreite an diesem Ende. Grundsätzlich prüfen, ob diese Ballposition dort ist , wo sie jetzt oder weniger ist. Mit unserer Variable move X können wir dies dann rückgängig machen, indem wir diese auf das negative Äquivalent setzen. Denken Sie daran, dass wir nur die X-Position überprüfen, also sollte der Ball irgendwo vertikal von oben nach unten abprallen , solange er mit dem Gesicht des Paddels übereinstimmt. Lasst uns das auffrischen und testen es aus. Wir sollten jetzt einen Sprung sehen, bevor er auf die Rückseite der Leinwand trifft. Gut, also funktioniert das alles jetzt gut. Als nächstes möchten wir diesen Sprung nur dann beschränken, wenn sich der Ball zwischen oben und unten im Paddel befindet. Wir haben bereits eine Variable in unserem Spiel namens Spielerposition, die sich zunächst in der Mitte der Leinwand befindet, die für uns jetzt 200 sein würde. Wenn die Auf- und Abwärtstasten gedrückt werden, aktualisiert der Mittelpunkt des Paddels die Positionsvariable des Spielers sodass wir immer wissen, wo das ist. Nehmen wir zum Beispiel an, es ist derzeit bei 100, als nächstes müssen wir überprüfen, wo sich der Ball in Bezug auf das Paddel befindet. Jetzt können wir 70 als Ballposition verwenden. Nehmen Sie diesen Wert vom Paddel weg und wir können sehen, dass der Unterschied 30 Pixel beträgt, und dies ist eine positive Zahl. In einem anderen Beispiel können wir sehen, dass die Ballposition 125 ist. Nehmen Sie dies erneut von der Spielerposition ab, aber dieses Mal ist das Ergebnis eine negative Zahl von 25. Aber warum spielt diese Berechnung eine Rolle? Nun, es ist wichtig, denn wenn diese Nummer innerhalb der Paddelhöhe liegt, sollte es einen Kontakt geben. Wir hätten die Hälfte der Paddelhöhe , da wir von der Mittellinie aus arbeiten , und wir müssen auch den Ballradius berücksichtigen. Hier können die Dinge ein bisschen komplexer werden. Hier haben wir den Radius addiert oder abgezogen, je nachdem, auf welcher Seite des Balls ist, positive und negative Werte. In der vorherigen Folie hatten wir auch die gleichen positiven und negativen Zahlen , die wir berücksichtigen mussten. Dies bedeutet, dass wir einen komplexen Code schreiben könnten, um dies zu berücksichtigen, oder wir könnten unser Leben erheblich erleichtern, indem wir jeden Vergleich so ändern positiv ist, oder wir können dies mit einer mathematischen Methode namens absolut tun . Um zu sehen, wie Math. absolute funktioniert, springen wir in die Konsole und testen das aus. Wenn Sie ein Konsolenprotokoll mit dem Wert Mathematik platzieren, übergibt Delta abs eine positive Zahl wie zwei. Wenn wir jetzt aktualisieren und in die Konsole gehen, können wir sehen, dass wir den Wert von zwei haben so wie erwartet in der Konsole. Wenn wir dies jedoch in einen negativen Wert ändern, verschiebe ich dies einfach aus der Schleife damit es sich nicht weiter wiederholt. Aktualisieren, wir können auch sehen, dass der Wert immer noch eine positive Zahl von zwei ist. Unabhängig davon, ob wir eine positive oder eine negative Zahl eingeben, erhalten wir immer das angezeigte positive Äquivalent. Der Punkt hier ist, dass wir diese absoluten Methoden verwenden können , um sicherzustellen , dass die Berechnung zwischen Ball und Paddel immer positiv ist, was bedeutet, dass wir diesen Wert immer mit einem positiven vergleichen können Aktion, den Ballradius hinzuzufügen, anstatt herausfinden zu müssen , ob wir diesen hinzufügen oder abziehen möchten. Rüber zum Code und lass uns sehen, wie das aussieht. Wir können unser Konsolenprotokoll entfernen und dann oben in unsere if-Anweisung springen. Wir überprüfen derzeit nur die Exposition, aber jetzt müssen wir auch die Y-Position mit dem Operator „UND“ überprüfen . Jetzt werden wir prüfen, ob der Ball zwischen oben und ganz unten liegt . In Mathematik an Bauchmuskeln weitergeben. Wir bekommen immer eine positive Zahl. Was wir tun wollen, ist zu überprüfen, ob die Ball Y-Position die Spielerposition wegnimmt. Denken Sie daran, dass dies uns diesen Wert zwischen Ball und Paddel geben wird, aber es wird immer eine positive Zahl sein , anders als bei den Folien. Dann prüfen wir, ob dieser Wert kleiner oder gleich der Höhe des Paddels ist , geteilt durch 2 plus den Kugelradius. Der Grund, warum wir den Ballradius hinzufügen können und wir uns keine Sorgen machen müssen je nachdem, auf welcher Seite er sich ist, dass wir dies immer in eine Pluszahl umwandeln daher addieren wir immer den Ballradius. Lassen Sie uns das speichern und probieren Sie dies im Browser aus. Zuallererst kann der Ball automatisch spielen, und wenn wir das Paddel jetzt an Ort und Stelle bewegen, sollten sie jetzt einen Kontaktpunkt zwischen Ball und Paddel verursachen . Ich weiß, dass dies schwierig erscheinen mag, aber ohne diese positive Umwandlung müssten wir dies nicht duplizieren, müssten wir dies nicht duplizieren da der Ball entweder über oder unter der Paddel-Mittellinie liegt. Jetzt, da dies funktioniert, müssen Sie als Nächstes den Kontaktpunkt für das Paddel des Computers überprüfen. Diese wird ziemlich ähnlich sein, also können wir die vollständige if-Anweisung im Player-Bereich kopieren und diese direkt unter den Computerkommentar einfügen. Erstens muss die Ausstellung auf der rechten Seite vorbei sein. Wir müssen jetzt prüfen, ob die Ballposition jetzt größer ist, fügen Sie den Ballradius hinzu, um dies zu berücksichtigen. Rechts vom Größeren oder Gleichen müssen wir prüfen, ob der Ball hinter dem Paddel des Computers liegt . Wir können dies tun, indem wir die Leinwand, Breite, Takeaway die Breite des Paddels überprüfen. Dies sollte die geachtete X-Position sein, und für die y-Position wird dies ziemlich ähnlich sein. Wir möchten auch prüfen, ob dies zwischen der Ober - und Unterseite des Paddels liegt zwischen der Ober - und Unterseite des , anstatt es an der Spielerposition zu überprüfen. Wir möchten dies anhand der Computerposition überprüfen. Natürlich wurde dieser noch nicht erstellt Gehen wir also ganz nach oben wo wir unsere Variablen erstellt haben, und wir können unsere Spielerposition duplizieren und dies in die Computerposition ändern. Auch hier ist es völlig in Ordnung, dies in der Mitte der Leinwand zu setzen , für den Beginn unseres Spiels. Die Computerposition wird auch in einem zukünftigen Video aktualisiert. Um dies zu bereinigen, können wir jetzt wieder zur Kollisionsfunktion zurückkehren und unseren temporären Ball entfernen , das brauchen wir nicht mehr. Es wird ziemlich schwierig sein zu testen, ob das Paddel des Computers funktioniert, da wir das nicht in Richtung Ball bewegen können. Aber eine Sache, die wir tun können, nur um die Dinge zu überprüfen und zu überprüfen, ob wir einen Sprung haben, ist, die Y-Position zu ändern, um einen Wert von Null zu haben. Dadurch wird der Ball horizontal durch unser Spiel bewegt, vom Paddel der Spieler. Exzellent, also arbeitet der Bounce jetzt von unseren beiden Paddeln ab. Jetzt ändert es sich zurück, Negative 1, da wir wissen, dass das funktioniert. Wir haben es durch einen der schwierigeren Teile unseres Spiels geschafft. Es mag ein bisschen schwierig sein, es aufzunehmen, aber dies ist wirklich ein wesentlicher Bestandteil, damit unser Spiel korrekt funktioniert. Es ist nicht perfekt. Wir haben bestimmte Edge-Fälle nicht berücksichtigt, z. B. wenn der Ball ganz oben oder ganz unten auf das Paddel trifft , aber wir wollen in diesem Kurs nicht zu tief gehen. Als Nächstes schauen wir uns im kommenden Video an, wie Sie die Ergebnisse sowohl für den Player als auch für den Computer verfolgen können. 11. Tracking: Wir verwenden die FiltText-Methode bereits, um unsere Punktzahl auf den Canvas zu ziehen , und unsere Scores werden auch in Variablen gespeichert. Wir wissen auch, wann der Spieler oder der Computer punktet, indem wir den Ball von der linken oder rechten Seite unseres Canvas treffen den Ball von der linken oder . Der logische nächste Schritt wäre, diese Variablen in diesem Fall zu aktualisieren, um dann die Punktzahl auf dem Bildschirm zu aktualisieren, diese Variablen, bei denen der Spieler punktet und auch Computer in die Cloud punkten Funktion, lassen Sie uns das in unserem Skript lokalisieren. Gerade hier. Wir haben uns derzeit bei der Konsole angemeldet, wenn ein Spieler oder der Computer erzielt hat. Innerhalb unserer „if else if-Anweisung könnten wir unsere Score-Variablen hier direkt aktualisieren , aber stattdessen rufe ich eine Funktion auf. Diese Funktion überprüft auch andere Dinge, wie wenn das Spiel vorbei ist , und legt den Ball auch wieder in die Mitte. Wir ersetzen diese beiden Konsolenprotokolle durch eine Funktion, die wir bald als Score erstellen werden. Die Punktefunktion muss auch darauf hingewiesen werden , welcher unserer Spieler erzielt hat. Für unseren ersten geben wir den Computer als Saite ein, und für unseren zweiten, wenn der Spieler erzielt hat, werden wir den Spieler zu dieser Funktion übergeben. Natürlich müssen wir dies erstellen und einfach unsere Cloud-Funktion sprengen, unsere Funktion namens Score erstellen. Hier drinnen nehmen wir den Spieler auf. Denken Sie daran, dass diese Spielervariable entweder unserem Computer oder unserem Player entsprechen wird. Wir können überprüfen, welche davon mit einer if-Anweisung bestanden wurde . Wenn die Player-Variable dem Computer entspricht, werden wir hier etwas tun, nämlich unsere Variablen zu aktualisieren. Denken Sie daran, dass wir uns zu Beginn den Spielerstand und den Computerstand angeschaut haben, und hier werden wir beide Variablen um den Wert eins aktualisieren . Dieser ist für den Computer-Score bestimmt. Erhöht sich mit Plus-Plus. Sonst aktualisieren wir im Spielerstand. Rüber zum Browser und lass uns das testen. Wir lassen den Ball ohnmächtig werden und das Paddel. Wir können sehen, dass der Computer-Score sehr schnell steigt. Der Grund dafür ist, dass wir jedes Mal der Ball bewegt oder jedes Mal wir einen neuen Rahmen in unserer Schleife haben, prüfen wir, ob der Ball hinter dem Spieler oder dem Paddel des Computers liegt . Da wir ständig hinter dem Paddel stehen, wird die Punktzahl weiter steigen. Um das zu beheben, können wir den Ball wieder in die Mitte unseres Spiels bringen , damit wir von vorne anfangen können. Die Art und Weise, wie wir dies innerhalb unserer Score-Funktion tun können, besteht darin Ballposition mit BallX zurückzusetzen , ist gleich der Leinwand. Breite geteilt durch 2, platziere diese in die Mitte. Wir werden das Gleiche auch für den Standort von BalLy tun. Dieses Mal basiert dies auf der Leinwandhöhe, ebenfalls durch 2 geteilt wird. Testen wir das mal. Aktualisieren Sie, lassen Sie den Ball hinter dem Paddel passieren, dieser ist auf eins gesetzt, dann wird der Ball wieder in die Mitte gelegt, damit unser Spiel fortgesetzt wird. Dies ist eine einfache Möglichkeit, die Ergebnisse unseres Spiels zu verfolgen. Im kommenden Abschnitt werden wir uns ansehen, wie wir eine maximale Punktzahl hinzufügen können , damit wir wissen, wann das Spiel beendet ist, und den Gewinner auch auf dem Canvas anzeigen. 12. Das Spiel beenden: Der erste Schritt zur Beendigung unseres Spiels besteht darin, festzulegen wie viele Punkte wir maximal sein möchten. Dafür benötigen wir eine Variable an der Spitze, die als Gewinnsumme bezeichnet wird. Const WinningTotal und mein Wert wird gleich drei sein , also wird der erste Spieler, der drei erreicht, der Gewinner sein und wir können dies innerhalb unserer Score-Funktion aktualisieren. Gehen wir zurück in unsere Funktion. Hier müssen wir prüfen, ob unser Computerstand oder Spielerstand dieser Gewinnsumme entspricht. Wenn Sie eine if-Anweisung platzieren, um zu beginnen, prüfen Sie, ob der Computerwert unserer neuen Variablen entspricht , die insgesamt gewinnt. Wenn ja, werden wir etwas tun, wenn nicht, geben wir eine Else-if-Klausel ein und dieses Mal prüfen wir, ob der Spielerstand auch unserer Gewinnsumme entspricht. Was wir hier machen wollen, beenden wir das Spiel, indem eine EndGame-Funktion erstellen. Offensichtlich haben wir das noch nicht erstellt, aber es heißt EndGame. Genau wie bei der Erstellung unserer Score-Funktion, die den Spieler aufgenommen hat, werden wir dasselbe auch für die EndGame-Funktion tun. Dies ist die Linke, diese Funktion weiß, welche der Gewinner war. Dies war der Computer, dann werden wir auch das Schlüsselwort return übergeben um aus den Anweisungen auszubrechen. In ähnlicher Weise wird die else-if-Anweisung auch unsere EndGame-Funktion aufrufen , aber den Spieler übergeben. Kehren Sie auch davon zurück, wenn dies zutrifft und der Grund, warum die EndGame-Funktion wissen muss , welcher dieser Spieler der Gewinner war, liegt darin , dass wir die Farben ändern werden , je nachdem, welcher war der Gewinner. Wie Sie sehen können, haben wir die rote Farbe für den Player und die blaue Farbe für den Computer. Dies wird sich in unserem Endgame-Text widerspiegeln. Lassen Sie uns diese Funktion direkt unten erstellen. Denken Sie daran, dass dies entweder am Computer oder dem Spieler übergeben wird, der in einem Gewinner gespeichert wird und dann eine „ if else“ -Anweisung übergeben wird. Im if-Bereich können wir prüfen, ob der Gewinner dem Computer entspricht. Sie müssen nur diese Klammern entfernen, wir haben diese nicht im Abschnitt else. Wenn der Gewinner dem Computer entspricht, was der Farbe Blau entspricht, ändern wir dann die Textfarbe, um die Ergebnisse in einer blauen Farbe anzuzeigen. ctx.fillStyle ist gleich blau und dann ändern wir im else Abschnitt fillStyle so, dass er der roten Farbe entspricht , um zu unserem Spieler zu passen. Der Grund, warum wir diese Textfarbe ändern , liegt darin, dass wir nach etwas Text auf der Leinwand anzeigen Ende des Spiels etwas Text auf der Leinwand anzeigen. Dies wird den Spieler einfach wissen lassen ob er gewonnen hat oder ob der Computer gewonnen hat. Kurz vor dem Text legen wir fest, die Textzeile dem Mittelpunkt entspricht. Platzieren Sie dies in die Mitte der Leinwand und erstellen dann unsere Texte mit einer Funktion namens FillText. Öffnen Sie das Backtick, damit wir eine Variable einfügen können , da wir auch die Variable des Gewinners einfügen müssen , je nachdem, ob der Computer oder der Spieler gewonnen hat. Angenommen, der Gewinner ist ein Doppelpunkt, dann mit dem Dollarsymbol und den geschweiften Klammern in JavaScript können wir mit dem Dollarsymbol und den geschweiften Klammern in JavaScript die Variable des Gewinners einfügen. Dies ist der Gewinner ist Spieler oder der Gewinner ist Computer. Fügen Sie nach den Backticks ein Komma hinzu, dann können wir es in die Mitte der Leinwand platzieren. Zuallererst die Exposition, die die canvas.width geteilt durch zwei ist. Auf der Y-Position befindet sich canvas.height geteilt durch zwei. Auto-Browser und wir können das ausprobieren. Aktualisieren Sie und lassen Sie uns dies aus dem Weg gehen , um auf den Wert von drei zu gelangen. Das ist eins, zwei und drei. Sie können sofort sehen, dass wir unseren Text anfangs sehen, aber er verschwindet schnell und das Spiel geht weiter. Der Grund, warum dies passiert, liegt darin, dass unsere Schleife noch läuft. Wir haben nichts getan, um unser eingestelltes Intervall zu stoppen. Sobald der Player oder der Computer die Punktzahl von drei erreicht hat, zeichnen wir den Text immer noch sehr kurz auf die Leinwand, aber bei der nächsten Iteration unserer Schleife führen wir diese Klartext-Methode das löscht alle Texte vom Bildschirm und zeichnet dann alle unsere Spielfunktionen neu. Wie verhindern wir, dass diese Schleife läuft? Nun, das eingestellte Intervall kann durch eine Methode namens Clear Intervall gestoppt werden . Dies beinhaltet das Speichern eines Verweises auf dieses Intervall, wenn wir es erstellen , und dann die Verwendung dieser Referenz , um es später mit klarem Intervall zu stoppen. Diese Referenz kann innerhalb einer Variablen gespeichert werden und wie alle anderen Variablen wird dies ganz oben sein. Rufen Sie dieses GameLoop auf und stellen Sie diese Variable unten auf gleich unserem Intervall ein, damit GameLoop unserem setInterval entspricht. Hier rufen wir setInterval immer noch wie zuvor auf, aber dies wird eine eindeutige ID zurückgeben , die in dieser Variablen gespeichert ist. Wir können dies sehen, wenn wir dies an der Konsole protokollieren, in den Browser springen und in die Konsole aktualisieren, und wir können den Wert von einem sehen. Wenn mehrere Intervalle ausgeführt wurden, jede dieser zurückgegebenen IDs eindeutig. Zurück zu unserer EndGame-Funktion kann diese Variable jetzt an ClearInterval übergeben werden , um die Ausführung der Schleife zu verhindern. Wir werden das gleich zu Beginn unserer Funktion tun. Übergeben Sie jede Methode, die ClearInterval ist, die unsere ID, unser Referenzspeicherintervall namens GameLoop, aufnimmt . Jetzt können wir das testen, aktualisieren und warten, bis dies den Wert drei erreicht. Gut. Wir können sofort sehen, dass das Spiel einfriert und wir haben immer noch den Text auf dem Bildschirm. Um dies zu verbessern, wäre es besser, den Ball zu räumen, die Paddel und auch diese gepunkteten Linien im Hintergrund zu räumen. Sogar nur die Punktzahl des Siegers auf der Leinwand. Dies ist etwas, was wir bereits von unserer Schleife aus tun können, wo wir unsere Leinwand löschen, wir ClearRect. Kopieren wir das und platzieren in unsere EndGame-Funktion. Dies wird nur die ClearInterval-Methode, es wird den Rest des Canvas löschen. Da es passiert, bevor wir unseren Text zeichnen, sollten wir den Text immer noch auf dem Bildschirm sehen aber es wäre nützlich, wenn wir die Punktzahl auch ganz oben sehen könnten . Nun, das ist ziemlich einfach. Wir wissen auch, wie man die Punktzahl mit dieser Funktion genau hier zeichnet . Nachdem wir unseren Canvas gelöscht haben, aktualisieren Sie es und wir versuchen es noch einmal. Großartig, die Leinwand wurde gelöscht wir sehen immer noch den Text. Wir sehen immer noch das Endergebnis ganz oben. das alles jetzt funktioniert, beginnen und starten wir unser Spiel neu. 13. Das Spiel starten und neu starten: Anstatt dass unser Spiel sofort beginnt , sobald der Browser geladen wird, wäre es stattdessen schön, diese Aktion mit der Tastatur auszulösen , indem Sie so etwas wie die Leertaste verwenden. Wir werden uns jetzt ansehen, wie das geht und wie wir unser Spiel neu starten können, sobald es fertig ist. Ich benutze die Leertaste, um das Spiel zu starten, aber du kannst auf eine andere Taste wechseln, wenn du möchtest. Sieh dir unsere Switch-Anweisungen an. wir werden auf den Pfeil nach oben und den Pfeil nach unten hören. Wir können einen neuen Fall erstellen, um auf unseren ausgewählten Schlüssel zu achten , um das Spiel zu beginnen. Also Fall, diesmal als String. Der Schlüssel, auf den ich hören werde, ist die Leertaste, setzen Sie einen Doppelpunkt, und dann rufen wir eine Funktion auf, um das Spiel namens Spielstart zu starten. Wenn dies in der Break-Klausel stimmt und kurz bevor wir diese Funktion erstellen, wäre es jetzt auch sinnvoller diesen neuen Teil der Funktion in etwas anderes umzubenennen, da er andere Dinge tut anstatt unseren Spieler einfach nach oben oder unten zu bewegen. Ich möchte eine gehandhabte Taste drücken. Denken Sie daran, dass wir dies auch in unserem Key Down Listener direkt oben ändern müssen . Natürlich müssen wir diese Spielstartfunktion erstellen. Richten Sie das direkt unten ein. Wenn wir darüber nachdenken, was soll dieses Spiel tun? Nun, da wir das Spiel derzeit nicht aktualisieren können und es derzeit ohne etwas beginnt, möchten wir diese Schleife, die wir es nennen, direkt unten in unsere -Funktion. Anstatt dieses Spiel sofort zu beginnen, können wir dies ausschneiden und in unsere Spielstartfunktion einfügen, so dass dies nur passiert, wenn die Leertaste gedrückt wird. Probieren wir es mal aus. Wenn wir uns aktualisieren, sehen wir noch keinen Spielbeginn. Drücken Sie die „Leertaste“ oder die gewählte Taste und los geht's. Anstelle dieses leeren Bildschirms sollte es am Anfang auch einige Anweisungen geben. Lassen Sie den Benutzer wissen, dass er die Leertaste drücken muss , um zu beginnen. Dies muss nicht in eine Funktion oder irgendetwas anderes eingehen , wir können dies einfach oben in unserem Skript hinzufügen. Aber das werden nur einige Texte sein und wir verwenden FillText, aber zuerst legen wir die Farbe mit FillStyle gleich Rot fest. Sie können dies ändern, wenn Sie es vorziehen. CTX.Font setzt dies auf eine Zeichenfolge oder 30 Pixel für die Schriftgröße mit einem Helvetica-Stil. Platzieren Sie dies mit einer Textzeile in die Mitte, zeichnen Sie dann unseren Text mit der Methode FiltText und übergeben Sie eine Zeichenfolge. Wir müssen keine Variablen einfügen, daher sind die regulären Zitate Ordnung, dann der Text des zu spielenden Leertaste. Für X- und Y-Positionen ist dies die Leinwandbreite geteilt durch zwei und dividiert auch die Höhe durch zwei. Probieren wir das mal aus. Es gibt unseren Text. Drücken Sie „Leertaste“ und unser Text wird ebenfalls gelöscht denn wenn Sie sich ganz unten erinnern, wird die Leinwand vor jeder unserer Schleifen gelöscht. Zurück zu unserer Spielstartfunktion gibt es auch noch ein paar andere Dinge, die auch hier hineingehen müssen. Der erste Schritt ganz oben besteht darin, alle Ergebnisse zurückzusetzen. Der Spieler punktet gleich 0 und der Computer punktet ebenfalls 0. Verwendung eines klaren Intervalls werden auch alle vorhandenen Timer gelöscht, die in unserer Spielschleifenvariablen gespeichert sind. Probieren wir das mal aus. Aktualisieren, drücken Sie „Leertaste“, um zu beginnen, und alles sieht gut aus. Alle Ergebnisse wurden aktualisiert, aber es gibt ein kleines Problem, wenn wir während des Spiels die Leertaste drücken. Sie können oben sehen, wenn wir jetzt die Leertaste drücken, wird die Punktzahl jedes Mal zurückgesetzt, wenn wir das Spiel beginnen. Dies ist kein Problem, wenn wir das Spiel tatsächlich beginnen wollen, aber wenn der Spieler dies während des Spiels versehentlich drückt, wird es neu gestartet. Wir können dies helfen, indem wir dies mit einer Variablen im Auge behalten . Lassen Sie das Spiel zunächst als Wert falsch laufen, also schalten wir dies auf wahr um also schalten wir dies auf wahr um, wenn das Spiel läuft, was dann verhindert, dass die Leertaste unser Spiel neu startet. Wir müssen dies an ein paar verschiedene Stellen einfügen. Zuallererst suchen wir nach unserer Funktion, die Endgame ist. Wie Sie sich vorstellen können, können wir, da dies das Ende des Spiels ist, auch diese laufende Variable für das Spiel in die Startfunktion des Spiels gleich falsch einstellen . Ganz oben möchten wir einen Check durchführen, um zu sehen ob diese laufende Variable dem Spiel entspricht „true“. Übergeben Sie dies innerhalb einer if-Anweisung, wenn das Spiel läuft. Wir müssen nicht gleich wahr oder ähnliches sagen. Wenn der Wert des laufenden Spiels gleich dem Wert true ist, wird der Code innerhalb dieser Klammern ausgeführt. Oder wir können dies auch auf eine einzige Zeile legen und die geschweiften Klammern entfernen und dann aus dieser Funktion zurückkehren. Grundsätzlich, wenn das Spiel gleich true ist, springen wir zu dieser Funktion heraus , ohne den Rest des folgenden Codes auszuführen. Dies verhindert, dass das Spiel neu gestartet wird. Wenn dies nicht der Fall ist , wenn es falsch ist, möchten wir den folgenden Code ausführen. Wir würden auch sagen, dass in unserem Spiel laufende Variable jetzt gleich wahr ist. Dies verhindert daher, dass diese Funktion ein zweites Mal ausgeführt wird , wenn die Leertaste während des Spiels gedrückt wird. Wir können das ausprobieren, auffrischen, „Leertaste“ drücken, den Ball für die Punktzahl zurückgehen lassen und wenn wir jetzt versuchen, das Leerzeichen zu drücken, das Spiel nicht zurückgesetzt. Aber wir haben ein anderes Problem , das wir ansprechen müssen und um dies zu sehen, wenn wir das Spiel neu starten und darauf warten, die Punktzahl von drei zu erreichen, lassen Sie uns dreimal zurückgehen. Alles ist gut, wir haben den Text des Gewinners ist Computer, die Punktzahl von 3-0. Aber wenn wir das Spiel jetzt mit der Leertaste neu starten, startet das Spiel neu, aber wir haben immer noch eine erste Punktzahl von einem. Aber Sie würden erwarten, dass dies Null ist, da wir dies in unsere Funktion gesetzt haben . Warum glaubst du, dass das passiert? Nun, um mehr herauszufinden, gehen wir in unsere Score-Funktion ein. Die Score-Funktion ist der einzige Ort, an dem wir eine dieser Variablen aktualisieren. Die Score-Funktion wird direkt oberhalb unserer Collide-Funktion aufgerufen . Springen Sie in die Collide-Funktion und wir rufen dies mit unserem Abschnitt „If sonst“ auf. Dies ist die einzige Funktion oder der einzige Code, der in unserem Spiel aufgerufen wird für die Aktualisierung dieser Variablen verantwortlich ist. Wir wissen, dass dies eine Ursache dafür ist unser Punktestand anfangs auf eins festgelegt wird. Warum denkst du, dass diese Score-Funktion zu Beginn eines neuen Spiels aufgerufen wird ? Nun, der Grund, warum dies passiert, ist dass unser Ball, sobald das Spiel beendet ist, entweder auf der linken Seite für eine Punktzahl oder auf der rechten Seite vorbei ist. Wir haben dies durch die Variable namens BallX gesteuert. Ja, in unserer Spielstartfunktion setzen wir zunächst beide Punkte zurück, aber sobald ein neues Spiel beginnt, berührt der BallX-Standort immer noch eine der Seiten, wodurch die Punktefunktion renn nochmal. Dies zu beheben ist ziemlich einfach. Alles, was wir tun müssen, ist, den Standort von BallX wieder in die Mitte zurückzusetzen , wenn das Spiel beginnt. Das Spiel beginnt kurz nach einem laufenden Spiel und bevor wir unsere Ergebnisse zurücksetzen, können wir auch den Wert von BallX so zurücksetzen , dass er in der Mitte des Bildschirms liegt. Testen wir das mal. Wir kommen zum Ende unseres Spiels, das ist eine Punktzahl von drei. Das Spiel ist vorbei, unsere beiden Punkte werden jetzt erwartungsgemäß zurückgesetzt. Wenn Sie solche Spiele erstellen, werden Sie oft Edge-Fälle wie diese finden , an denen Sie arbeiten können, und es geht normalerweise nur darum, verschiedene Dinge auszuprobieren und zu sehen, welches funktioniert. Als Nächstes schauen wir uns an, wie wir eine zufällige Bewegung auf den Ball anwenden können , wenn er springt. 14. Random: Wenn diese beiden MoveX- und MoveY-Variablen voreingestellt sind, wird das Spiel viel vorhersehbarer. Wir wissen, weil unser negativer 2 und unser negativer 1-Wert in welche Richtung der Ball gehen würde. Wir können dies verbessern, indem wir dies innerhalb einer Funktion viel zufälliger machen. Lassen Sie uns eine Funktion direkt unter unseren Texten erstellen , die als Zufallsbewegung bezeichnet wird. Der Zweck dieser Funktion besteht darin, diese beiden Variablen mit einigen Zufallswerten festzulegen , was bedeutet, dass wir diese Anfangswerte jetzt entfernen können. Um diese Variablen festzulegen, müssen wir diese RandomMovement-Funktion innerhalb von GameStart aufrufen . Suchen Sie diese Funktion, rufen Sie unsere neue Funktion auf, die unsere beiden Variablen bei jedem Spielstart mit einem neuen Wert zurücksetzt . Kehren Sie zurück zu unserer RandomMovement-Funktion, die unsere zwei X- und Y-Werte generiert den Ball in unvorhersehbare Richtungen abstellt . Dies verlangsamt und beschleunigt das Spiel aufgrund der zufälligen Werte und Bewegungen ein wenig, dh die x-Bewegung könnte höher oder niedriger sein, wodurch es sich langsamer oder schneller bewegt. Erstellen Sie erneut zwei Variablen oder zwei Konstanten. Dies ist zufälliges x, was eine Zufallszahl zwischen zwei und vier sein wird. Grundsätzlich setzen wir unseren x-Wert auf 2 oder 4 und auch auf eine positive oder negative Richtung ein. Wir können dies tun, indem wir auf eine JavaScript-Mathe-Funktion namens random zugreifen . Math.random generiert eine Zufallszahl zwischen 0 und 1. Aber wir werden diesen Wert mit 3 multiplizieren. Dies ermöglicht es uns, ab eins eine Zahl zu generieren . Wir können dies auch abrunden, indem wir diesen Wert reduzieren. Fügen Sie dies in der math.ceil -Methode ein. Da wir nun unseren Wert aufrunden, wird uns dies entweder einen Wert von 1, 2 oder 3 geben. Da wir den Wert von 2-4 wollen, können wir diesen Wert noch einen hinzufügen, um uns unsere Zufallszahl zu geben . Testen wir das mal. Platzieren Sie ein Konsolenprotokoll von RandomX, speichern und aktualisieren Sie den Browser springen Sie in die Konsole. Um dies zu sehen, müssen wir auch unsere GameStart-Funktion aufrufen. Drücken Sie die Leertaste, den Wert von 2, den Wert 4, 2, 3, 2. Dies scheint alles richtig zu funktionieren. Für unseren Randomy-Standort können wir diese Zeile duplizieren den Variablennamen in RandomY ändern. Randomy wird eine Zahl zwischen 0 und 2 sein. Diesen müssen wir nicht plus 1 hinzufügen. Wir können math.round verwenden, um diese Zahl zu runden, so dass wir einen Wert von Null auf zwei haben. Wir müssen jetzt auch zwei weitere Variablen erstellen. Dies wird entscheiden, ob wir eine positive oder negative Richtung haben . Derzeit haben wir nur einen positiven X- und Y-Wert, aber dies wird auch zur Unvorhersehbarkeit beitragen. Const PlusorMinusx. Auch hier greifen wir auf die zufällige JavaScript-Funktion zu, die uns mehr eine Zahl zwischen 0 und 1 gibt. Mit dem bedingten JavaScript-Operator können wir prüfen, ob dieser Wert kleiner als 0,5 ist, was ungefähr eine Chance von 50/50 sein sollte. Wenn dies der Fall ist, geben wir eine negative Zeichenfolge zurück oder speichern sie innerhalb dieser Variablen. Wenn nicht, wird es positiv sein. Da es sich um eine Zahl zwischen 0 und 1 handelt, besteht ungefähr eine halbe oder eine Wahrscheinlichkeit von 50/50, dass dies entweder ein negativer oder ein positiver Wert sein wird. Wir werden dies auch bald zu unseren Zahlen hinzufügen. Duplizieren Sie dies und der einzige Unterschied ist diesmal der Variablenname von y. Dann können wir diese Variablen verwenden um zusammenzuführen und unsere neuen Werte der MoveX - und MoveY-Variablen zu erstellen . Zuerst die Variable von MoveX. Da wir auch einen String-Wert für das Positive oder Negative zurückgeben , werden wir diesen in eine Zahlenfunktion einschließen, um sicherzustellen , dass wir immer eine Zahl anstelle einer Zeichenfolge erhalten. Beginnend mit x, PlusorMinusx, füge dies zu unserer Zufallszahl hinzu. Dies könnte beispielsweise negativ sein und dann ein Wert von zwei oder positiv oder eine beliebige Zahl zwischen diesem Bereich. Duplizieren. Wir machen das für MoveY. Ändert sich auch in ein Plus oder minus y und der Wert von zufälligem y. Dies ist eine zufällige positive oder negative Zahl in beide Richtungen, aber ich werde noch ein kleines Stück Zufall hinzufügen. Erstellen Sie Konstante, um dies in der genannten Zufallszahl zu speichern Stellen Sie das einfach auf math.random ein. Der Grund, warum wir dies tun, besteht darin, diesen beiden Variablen einen kleinen Zufallswert hinzuzufügen . Fügen Sie dies zu unserer ersten Nummer hinzu, dann sollte es zu unserer zweiten Nummer alles sein, was wir jetzt brauchen. Aktualisieren Sie den Browser. Jedes Mal, wenn wir das Spiel beginnen, sollten wir sehen, wie der Ball in eine etwas andere Richtung fährt . Wir haben es nach links, wir haben es nach rechts laufen, wir haben es nach oben, wir haben es nach unten. Sie können auch sehen, dass wir verschiedene Geschwindigkeiten haben abhängig von den tatsächlichen Werten für diese beiden Variablen. Dies ist wegen unserer Zufälligkeit noch nicht alles vorbei. Etwas später schauen wir uns an, wie wir der Ballrichtung eine zufällige Bewegung hinzufügen können , wenn sie von den Wänden und auch vom Paddel abprallt . Apropos Paddel, das werden wir im kommenden Video behandeln, in dem wir uns ansehen, wie man das Paddel des Computers automatisch bewegt. 15. Computer: Ganz oben in unseren Skripten haben wir den Player und auch die Computerpositionen innerhalb dieser Variablen. Beide Werte legen die Paddelpositionen zu Beginn unserer Spiele fest, stehen vertikal in der Mitte. Die Spielerposition, um die wir uns bereits gekümmert haben, mit den Bewegungen in unserer Handle Key-Press-Funktion. Jetzt können wir dem Computer auch etwas Bewegung hinzufügen , um das Spiel ein wenig spielbarer zu machen. Machen wir das in einer Draw-Computer-Paddle-Funktion, die gerade hier ist. Alles, was wir gerade tun, ist die canvas.height geteilt durch 2, Stellen in die Mitte zu setzen canvas.height geteilt durch 2, . Offensichtlich wollen wir das nicht genau wie oben tun. Wir möchten dies auch durch eine Variable ersetzen. Wir nehmen die Leinwandhöhe weg und ersetzen diese durch die Computerposition. Dies bedeutet, genau wie die obige Spielerposition wird jedes Mal, wenn diese Variable aktualisiert wird und wir dann die Schleife aufrufen, neue Position des auch die neue Position des Computerpaddels reflektiert. Die erste Stufe besteht darin, dies zu aktualisieren. Aber wie entscheiden wir, wie wir das bewegen sollen? Nun, wir könnten sehr komplex werden und Dinge wie künstliche Intelligenz einbeziehen, aber wir wollen nicht, dass dieser Kurs zu komplex ist. Stattdessen werden wir dies durch eine einfache Bewegung ersetzen Nachverfolgung. Dafür erstelle ich unten direkt über unserer Schleife eine neue Funktion, erstelle ich unten direkt über unserer Schleife eine neue Funktion die in jedem Intervall aufgerufen wird. Der Name der Funktion ist bewegungscomputer. Dies muss auch in jedem Intervall aufgerufen werden, damit wir unseren Funktionsnamen greifen und diesen in unsere Schleife aufnehmen können. Das grundlegendste Tracking kann in etwa so gemacht werden. Wir können unsere Variable der Computerposition aktualisieren , um der Position von Ball Y gleich zu sein. Dies wird effektiv die Position vertikal unseres Balls verfolgen , das Computerpaddel bewegen, um dies zu verfolgen, wir können sehen das? Wenn wir zu unserem Browser zurückkehren, aktualisieren Sie es und Sie können jetzt sehen, wie sich das Computerpaddel oben und unten bewegt je nach Position des Balls nach oben und unten bewegt. Großartig, das funktioniert alles gut, aber wie Sie sehen können, schafft dies ein Spiel, das dem Spieler unmöglich ist zu gewinnen. Auch hier könnten wir mit einer Computerbewegung so komplex werden, wie wir es wollen. Aber um es einfach zu halten, füge ich einfach eine If-else-Anweisung hinzu. Diese if-else-Anweisung aktualisiert die Computerposition schrittweise , je nachdem, ob sich der Ball über oder unter dem Paddel befindet. Wir können dies entfernen, eine if-Anweisung hinzufügen. Wo wir prüfen, ob die Computerposition derzeit unter der aktuellen Position von Ball Y liegt. Denken Sie daran, dass die Y-Achse oben bei 0 beginnt und in eine positive Richtung geht. Der Ball ist unter dem Paddel. Wir können dann die Positionsvariable des Computers aktualisieren , um uns auf den Ball zu bewegen. Dies kann durch Hinzufügen von Plus geschehen, andernfalls möchten wir das Paddel des Computers in die umgekehrte Richtung bewegen . Wir können das hier drinnen machen. Probieren wir das mal aus. Aktualisieren und testen Sie dies aus. Springen Sie den Ball zurück. Sie können sehen, dass sich der Computer gerade bewegt. Es ist jetzt ein gewinnbares Spiel. Sie können auch, wenn Sie die Schritte beschleunigen oder verlangsamen möchten , die das Computerpaddel benötigt, um auf den Ball zu gehen. Dies ist jedoch völlig optional, und dies muss möglicherweise auch fein abgestimmt werden je nachdem, wie schnell die Schleife läuft. Großartig. Dies ist eine sehr einfache Computerbewegung und als nächstes wird das Spiel noch weiter verbessern , indem der Ballbewegung zusätzliche Zufälligkeit hinzugefügt wird. 16. Random Bouncing: Der Ball prallt derzeit von allen Wänden und den Paddeln ab, ist ein wenig vorhersehbar. Derzeit liegt jeder Bounce bei 90 Grad, was uns oft in eine Situation bringt , in der der Ball manchmal auf einem Quadrat herumlaufen kann und von den Paddeln abprallt, kann und von den Paddeln abprallt ohne sich überhaupt bewegen zu müssen sie. Um dies zu verbessern, fügen wir unserem Paddel-Bounce eine gewisse Zufälligkeit unserem Paddel-Bounce , um unser Spiel ein bisschen besser zu machen. Dafür brauchen wir eine Funktion. Erstellen wir irgendwo in unserem Code eine Funktion mit dem Namen „ Generate random Bounce“. Füge etwas Zufälligkeit hinzu. Wir müssen nichts zu Verrücktes oder Komplexes machen. Wenn wir zuerst zu unserer Collide-Funktion gehen, überprüfen die letzten beiden if-Anweisungen den Paddelkontakt sowohl für den Player als auch für das Paddel des Computers. Derzeit, wenn es einen Kontakt zwischen dem Ball und dem Paddel gibt, machen wir hier nur die Richtung umzukehren. Wir tun dies, indem wir eine positive Richtung auf ein Negativ setzen und auch umgekehrt. Um ein wenig Zufälligkeit hinzuzufügen, müssen wir nur einer dieser Zeilen einen kleinen positiven oder negativen Wert hinzufügen kleinen positiven oder negativen Wert , den wir von unserer neuen Funktion zurückgeben können. Innerhalb dieser Funktion generieren wir zuerst eine Zahl zwischen Null und Eins. Null und eins gibt uns zwei Optionen, denen wir dann entscheiden können , ob wir eine positive oder negative Zahl erstellen wollen. Auch hier verwenden wir Math.Floor , um unsere Nummer zu runden. Die Zahl, die Sie abrunden möchten , wird mit Math.random generiert , um uns eine Zahl zwischen Null und Eins zu geben. Denken Sie daran, dass alle Math.random eine Zufallszahl zwischen Null und Eins erzeugen. Es beinhaltet nicht wirklich einen. Zum Beispiel wird es bis zu 0,999 reichen. Zufälligkeitszahl nach unten gibt uns immer einen Wert von Null. Um einen Wert zwischen Null und Eins zu erhalten, können wir dies mit zwei multiplizieren und diesen innerhalb einer Konstante installieren, diesen innerhalb einer Konstante installieren Nummer Null zu eins genannt wird. Diese beiden Optionen können jetzt verwendet werden, um ein positives oder ein negatives Symbol zu erstellen , genau wie wir es uns zuvor angesehen haben. Bewahren Sie dies in einer Konstante, positiv oder negativ auf. Dann greifen wir unsere Variable von oben, die entweder Null oder eins ist. Wenn dies einer der Optionen entspricht, die Null ist, wird die mit den bedingten JavaScript-Anweisungen erste Option mit den bedingten JavaScript-Anweisungen einen negativen Wert zurückgeben. Wenn nicht durch einen Doppelpunkt getrennt, wird ein positives Symbol zurückgegeben. Wenn dies eine Null zurückgibt, erhalten wir ein negatives Symbol. Wenn es ein zurückgibt, erhalten wir ein positives Symbol. Denken Sie daran, da wir eine Zeichenfolge zurückgeben, müssen wir die Ergebnisse auch in die Zahlenfunktion einwickeln . Stellen Sie sicher, dass wir immer eine Zahl anstelle einer Zeichenfolge zurückbekommen . Wir geben das Symbol zurück , das positiv oder negativ ist, und fügen dieses gleich einem kleinen Wert hinzu. Auch hier verwenden wir Math.random, um uns eine Zahl zwischen Null und Eins zu geben und um es ein bisschen kleinerer Wert zu machen , teilen wir dies durch zwei. Wenn wir diesen Wert dann von unserer Funktion zurückgeben, wird eine Zahl zurückgegeben die eine positive oder negative Zahl zwischen dem Wert Null und 0,5 ist . Da dies ein so kleiner Wert , den wir jetzt zurückgeben, wie können wir feststellen, ob dies zu unserem Bounce hinzugefügt wird oder nicht? Nun, das können wir zuerst mit einem Konsolenprotokoll sehen . Wenn wir nach unserer Cloud-Funktion und in unsere letzten beiden Abschnitte schauen , die wir uns zuvor angeschaut haben, können wir dies dem Player-Paddel-Kontakt direkt darüber hinzufügen , wo wir die Richtungsänderung unter ein Konsolenprotokoll mit dem Wert von mu von x. Kopieren Sie dies und machen Sie genau danach dasselbe. Jedes Mal, wenn der Ball vom Paddel der Spieler abprallt, sollten wir zwei Konsolenprotokolle mit dem Wert von mu von x sehen. Denken Sie daran, dass wir keinem unserer Richtungsänderungen einen anderen Zufallswert hinzugefügt haben einen anderen Zufallswert noch. Diese beiden Werte sollten in Bezug auf positiv oder negativ genau gleich oder das Gegenteil sein. Probieren wir das mal aus. Aktualisieren Sie und springen Sie in die Konsole. Starte unser Spiel und nimm jetzt Kontakt zwischen der Pfütze her, und wir können sehen, dass wir negative 2,49 und auch das positive Äquivalent haben . Da diese Zahlen genau gleich sind, beweist dies, dass wir nur die Richtung um 90 Grad umkehren. Aber wenn wir jetzt unseren kleinen Zufallswert hinzufügen, sollten wir zwei verschiedene Werte in der Konsole sehen. Jetzt fügen wir unser kleines Volume hinzu, das von unserer Funktion namens „Zufallsgrenzen generieren“ zurückgegeben wird. Das Gleiche gilt auch für das Paddel des Computers. Wenn wir dies nun testen, sollten wir sehen, dass der kleine Wert zurückgegeben und von unserer Funktion hinzugefügt wird, und dies sollte etwas andere Werte sein um uns eine andere Richtungsänderung mit unser Ball. Aktualisieren. Wenn wir jetzt ein paar Kontakte knüpfen, gehen wir los. Großartig. Nun, hier ist viel los aber wenn wir uns diese paarweise ansehen. den ersten beiden Paaren gibt es negative 3,55, was sich dann auf einen positiven Wert von 3,22 umkehrt. Da diese beiden Werte geringfügig unterschiedlich sind, bedeutet dies, dass unser Bounce-Wert jetzt wirksam wurde. Wenn wir uns das zweite Paar anschauen, ändern wir jetzt nicht nur den Wert von positiv auf ein Negativ, ändern auch jeden Grenzwert geringfügig. Dies gilt auch für alle Paare, die folgen. Kleine Veränderungen können einen großen Unterschied machen und unser Spiel viel weniger vorhersehbar machen. Hören Sie auch auf , dass der Ball in einem Quadrat auf der Leinwand herumläuft . Als nächstes schauen wir uns an, wie wir unser Paddel einschränken können , damit es nicht von der Canvas abgeht. 17. Das Paddel auf der Leinwand halten: Wenn wir uns dem Ende unseres Spiels nähern, der letzte Schliff, den Sie hinzufügen möchten , darin, die Spieler-Paddel so einzuschränken , dass sie nicht von oben oder unten auf der Leinwand abfallen , wenn wir die Auf- und Abwärtstasten. Dafür gehen wir in die Funktion HandleKeyPressed, um unseren Code hinzuzufügen, der benötigt wird, um dies einzuschränken. Diese HandleKeyPressed Funktion ist der Bereich in unserem Code , der erkennt, ob wir den Pfeil nach oben oder den Pfeil nach unten drücken. Die Switch-Anweisung ist dafür verantwortlich , die Spieler dann nach oben oder in eine Abwärtsrichtung gepaddelt zu bewegen. Im Inneren, beginnend mit dem Fall Pfeil nach oben, fügen wir Code hinzu, um zu verhindern dass die Blütenblätter der Spieler oben auf der Leinwand verschwinden. Bevor wir unsere Spielerposition um einen bestimmten Wert verschieben, fügen wir dazu unsere Spielerposition um einen bestimmten Wert verschieben, eine if-Anweisung hinzu, um dies zu überprüfen. Wenn etwas stimmt, möchten wir aus diesem Bereich zurückkehren, ohne die Position des Spielers zu verschieben. Es gibt etwas , das wir überprüfen möchten, ist die Spielerposition. Denken Sie daran, wenn wir über die Positionsvariable des Spielers sprechen , dies ist die Mittellinie des Paddels. Um ganz oben auf dem Paddel zu finden, müssen wir die Hälfte der Paddelhöhe abziehen und den Boden des Paddels finden , um sicherzustellen , dass es nicht von der Unterseite der Leinwand abgeht. Wir müssen auch die halbe Höhe des Paddels hinzufügen. Wir können dies innerhalb unserer if-Aussage verwenden. Abfahrt von der Top-Position innerhalb unserer if-Aussage. Zuallererst greifen wir die aktuelle Spielerposition ein. Genau wie wir auf den Rutschen gesehen haben, ziehen wir die Paddelhöhe geteilt durch 2 ab. Dies wird uns den höchsten Punkt unseres Paddels geben. Wir müssen prüfen, ob dies kleiner oder gleich 0 ist, was ganz oben auf unserer Leinwand ist. Wenn dies der Fall ist, kehren wir dorthin zurück ohne die Spielerposition zu bewegen. Dann machen wir im Pfeil nach unten eine ähnliche if-Anweisung, machen wir im Pfeil nach unten eine ähnliche if-Anweisung bei der wir überprüfen, ob die Spielerposition Diesmal werden wir die Hälfte der Paddelhöhe hinzufügen, da wir es mit der Unterseite des Paddels zu tun haben. Hier prüfen wir, ob der Boden des Pedals gleich oder größer als der Boden der Leinwand ist , die wir mit canvas.height finden können. Größer oder gleich, auf der Leinwand.height, wenn dies stimmt, kehrt wieder aus diesem heraus, ohne die Spielerposition zu bewegen, sodass sie nicht weiter als den unteren Rand der Leinwand geht. Testen Sie das aus, drücken Sie die Leertaste und wir gehen ganz nach oben. Das Place-Paddel geht nicht weiter als ganz oben. Bewegen Sie das nach unten. Es ist jetzt eingeschränkt, dass die Spieler paddeln, um im Canvas-Bereich zu bleiben. 18. Letzte Gedanken: [MUSIK] Dies ist es jetzt für das Ende unseres Spiels und herzlichen Glückwunsch, dass Sie diese Phase erreicht haben. Wir haben jetzt einige Kernkonzepte gelernt und obwohl unser Spiel nicht perfekt ist, ist es spielbar, haben wir alle Konzepte gelernt, die wir benötigen, um mit der Entwicklung von JavaScript-Spielen zu beginnen. Ich hoffe, es hat dir gefallen. Ich hoffe, du hast ein paar neue Fähigkeiten erworben und bist bestrebt mehr JavaScript-basierte Spiele zu entwickeln. Danke, dass du an diesem Kurs teilgenommen hast, und wir sehen uns im nächsten.