Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit vue3 ein Brick-Breaking-Spiel entwickeln

Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit vue3 ein Brick-Breaking-Spiel entwickeln

Vorwort

Ich habe einige Beispiele mit Vue3 geschrieben und finde, dass die Kompositions-API von Vue3 gut konzipiert ist. Ich habe meine Gewohnheiten ein wenig geändert, aber es wäre schön, noch zwei weitere zu schreiben. Dieses Mal schreibe ich über ein Spiel, das ich in meiner Kindheit sehr witzig fand - Breakout. Es macht Spaß, es zu spielen, wenn mir langweilig ist, und der Spielspaß ist ziemlich hoch. Dieses Mal habe ich versucht, die Vite+Vue3-Verpackung direkt zu verwenden. Vite ist auch sofort einsatzbereit. Seine Funktion besteht darin, dass es auch toten Code löschen und bei Bedarf verpacken kann, sodass die Verpackungsgeschwindigkeit auch sehr hoch ist. Studierende, die es noch nicht verwendet haben, können es ausprobieren.

Spieleffekte

Spielanforderungen

  1. Erstellen einer Szene
  2. Erstellen Sie einen Ball und eine Reihe von Hit-Blöcken
  3. Erstellen Sie einen beweglichen Block, der gesteuert werden kann, um sich nach links und rechts zu bewegen
  4. Wenn der Ball die linke und rechte obere Begrenzung und den beweglichen Block trifft, springt er zurück
  5. Das Spiel endet, wenn der Ball die untere Grenze erreicht.

Vollständiger Code

<Vorlage>

    <button @click="stop">Stopp</button>
    <button @click="start">Spielstart</button>
    <div style="Farbe: rot; Textausrichtung: Mitte; Schriftgröße: 25px">Punktzahl:{{scroce}}</div>

    <div Klasse="box" :style="{Breite :boxWidth +'px', Höhe:boxHeight +'px'}">
        <div Klasse="str">{{str}}</div>
        <div Klasse="kuaiBox">
            <div class="kuai" v-for="(item,index) in arr" :key="index" :style="{opacity :item.active ? '0':'1'}"></div>
        </div>
        <div Klasse="Ball" :style="{links :x + 'px', oben : y + 'px', Breite : Ball +'px', Höhe: Ball+'px'}"></div>
        <div Klasse="bottomMove"
             :style="{links :mx + 'px' , oben : my + 'px',Breite :moveBottomW +'px',Höhe : moveBottomH+'px' }"></div>
    </div>
</Vorlage>

<Skript-Setup>
    importiere {onMounted, onUnmounted, reaktiv, toRefs} aus 'vue'

    const boxWidth = 500, // Szenenbreite boxHeight = 300, // Szenenhöhe ball = 10, // Ballbreite und -höhe moveBottomH = 5, // Blockhöhe verschieben moveBottomW = 100 // Block verschieben, schnelles Lesen const strArr = 'Herzlichen Glückwunsch, Herausforderung erfolgreich!'

    //Verwenden Sie reactive, um einige beobachtbare Informationen zu speichern const state = reactive({
        x: boxWidth / 2 - ball / 2, // Die Standardposition der x-Achse des Balls ist in der Mitte y: boxHeight - ball - moveBottomH, // Die Standardposition der y-Achse des Balls ist in der Mitte mx: boxWidth / 2 - moveBottomW / 2, // Die Standardposition des bewegten Blocks ist in der Mitte my: boxHeight - moveBottomH, // Die Standardposition der y-Achse des bewegten Blocks ist in der Mitte // Array der getroffenen Blöcke arr: Array.from({length: 50}, (_, index) => {
            zurückkehren {
                Index,
                aktiv: false
            }
        }),
        str: '', // Gibt das Wort „erfolgreiche Herausforderung“ zurück scroce: 0 // Punktzahl })
    // Verwenden Sie toRefs, um die Informationen des beobachteten Objekts für die Verwendung als Vorlage zu dekonstruieren const {x, y, mx, my, arr, str, scroce} = toRefs(state)
    let timer = null, // Balltimergeschwindigkeit = 3, // Ballgeschwindigkeitskarte = {x: 10, y: 10},
        timer2 = null, // Timer für erfolgreiche Wortanzeige der Challenge index = 0 // Indexwert für erfolgreiche Wortanzeige der Challenge // Methode zur Anzeige des erfolgreichen Worts der Challenge const strFun = () => {
        wenn (strArr.length === index) clearInterval(timer2)
        Zustand.str += strArr.substr(index, 1)
        Index++
    }

    
    //Methode zum Bewegen des Balls// 1. Hier wird das Kartenobjekt verwendet, um die Koordinateninformationen aufzuzeichnen und festzustellen, ob der Ball abprallt, wenn er die linken, rechten, oberen und beweglichen Blöcke trifft// 2. Durchlaufe die Steine, um festzustellen, wann der Ball mit den Steinen kollidiert und verschwindet const moveBall = () => {
        const {offsetTop, offsetHeight, offsetLeft, offsetWidth} = document.querySelector('.bottomMove')
        wenn (Zustand.x <= 0) {
            map.x = Geschwindigkeit
        } sonst wenn (Zustand.x > Boxbreite - Ball) {
            map.x = -Geschwindigkeit
        }
        wenn (Zustand.y <= 0) {
            map.y = Geschwindigkeit
        }
        wenn (Zustand.y >= OffsetTop - OffsetHeight &&
            Zustand.y <= OffsetTop + OffsetHeight &&
            Zustand.x >= offsetLeft &&
            Zustand.x < OffsetLinks + OffsetBreite) {
            map.y = -Geschwindigkeit
        }
        wenn (Zustand.y > Boxhöhe) {
            Intervall löschen(Timer)
            Alarm('Spiel vorbei')
            Fenster.Standort.neu laden()
        }
        Array.from(Zustand.arr).fürEach((Element, Index) => {
            Konstante {
                OffsetLinks,
                Offset oben,
                Offsetbreite,
                Offsethöhe
            } = Dokument.querySelectorAll('.kuai')[index]
            wenn (state.x > offsetLeft
                && Zustand.x < OffsetLinks + OffsetBreite
                && status.y > offsetTop
                && Zustand.y < Offset oben + Offset Höhe) {
                wenn (!state.arr[index].active) {
                    Zustand.scroce += 100
                }
                Zustand.arr[index].active = true
            }
        })
        wenn (Array.von(Zustand.arr).jedes(Element => Element.aktiv)) {
            Intervall löschen(Timer)
            Timer2 = setzeIntervall(strFun, 1000)
        }
        Zustand.x = Zustand.x += Karte.x
        Zustand.y = Zustand.y += Karte.y
    }

    //Methode, um den Block nach links und rechts zu bewegen und den Ball zu fangen const bottomMove = ev => {
        wenn (ev.code === 'Leerzeichen') ClearInterval(Timer)
        Schalter (ev.key) {
            Fall 'PfeilRechts':
                staat.mx += 100
                brechen
            Fall 'Pfeil nach links':
                staat.mx -= 100
                brechen
        }
        staat.mx = staat.mx < 0 ? 0 : staat.mx
        Zustand.mx = Zustand.mx > Boxbreite - MoveBottomW ? Boxbreite - MoveBottomW : Zustand.mx
    }
    // Spiel pausieren const stop = () => {
        Intervall löschen(Timer)
    }
    // Starte das Spiel const start = () => {
        Timer = Intervall festlegen(Ball bewegen, 20)
    }
    
    // Bewegliches Blockereignis binden onMounted(() => {
        document.addEventListener('Taste hoch', unten verschieben)
    })
    // Aus dem Bewegungsblock-Ereignis herausgehen onUnmounted(() => {
        Intervall löschen(Timer)
    })
</Skript>

<Stil>

    .bottomMove {
        Breite: 100px;
        Höhe: 10px;
        Hintergrund: rot;
        Position: absolut;
        Übergangsdauer: 100ms;
        Übergangs-Timing-Funktion: Easy-Out;
    }

    .ball {
        Breite: 20px;
        Höhe: 20px;
        Hintergrundfarbe: rot;
        Randradius: 50 %;
        Position: absolut;
    }

    .kuaiBox {
        Anzeige: Flex;
        Flex-Wrap: Umwickeln;
    }

    .kuai {
        Breite: 30px;
        Höhe: 10px;
        Hintergrund: rot;
        Rand: 10px;
        Übergangsdauer: 100ms;
        Übergangs-Timing-Funktion: Ease-In;
    }

    .str {
        Textausrichtung: zentriert;
        Schriftgröße: 50px;
        Farbe: rot;

    }

    .Kasten {

        Inhalt ausrichten: zentriert;
        Breite: 500px;
        Höhe: 500px;
        Rand: 0 automatisch;
        Position: relativ;
        Rand: 5px durchgehend rot;
        Überlauf: versteckt;
    }

    .picker {
        Breite: 50px;
        Höhe: 50px;
    }
</Stil>

endlich

Ich werde vue3 weiterhin verwenden und auch in Zukunft weitere Beispiele schreiben.

Anbei die Adresse des Brick Breaking Game

shinewen189.github.io/nigo-ball-v…

Dies ist das Ende dieses Artikels über die Entwicklung eines Brick-Breaking-Spiels mit vue3. Weitere relevante Inhalte zum Brick-Breaking-Spiel vue3 finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Ein Beispiel für die Umgestaltung eines Puzzlespiels mit vue3

<<:  So erstellen Sie schnell zig Millionen Testdaten in MySQL

>>:  Der Unterschied und die Verwendung von Strg+z, Strg+c und Strg+d in Linux-Befehlen

Artikel empfehlen

MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

MySQL-Replikation - ausführliche Erklärung und ei...

Lösung für den Fall, dass der Tomcat-Server tomcat7w.exe nicht öffnen kann

Beim Konfigurieren des Tomcat-Servers ist mir heu...

Vue implementiert einen beweglichen schwebenden Button

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Analyse der Verwendungs- und Anwendungsszenarien von Slots in Vue

Was sind Slots? Wir wissen, dass in Vue nichts in...

Detaillierte Erklärung der atomaren DDL-Syntax von MySQL 8.0

Inhaltsverzeichnis 01 Einführung in Atomic DDL 02...

Häufige JavaScript-Speicherfehler und Lösungen

Inhaltsverzeichnis 1. Zeitüberwachung 2. Ereignis...

HTML-Grundlagen - Pflichtlektüre - Umfassendes Verständnis von CSS-Stylesheets

CSS (Cascading Style Sheet) wird zum Verschönern ...

Mehrere Möglichkeiten zur manuellen Implementierung von HMR in Webpack

Inhaltsverzeichnis 1. Einleitung 2. GitHub 3. Gru...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...

Was ist dies in einer Punkt-für-Punkt-Reihe von JavaScript?

Verstehe das Vielleicht haben Sie this in anderen...

Erläuterung des Vue.js $refs-Anwendungsfalls

Trotz Props und Events müssen Sie manchmal immer ...

Zwei Bilder von JavaScript zum Verständnis der Prototypenkette

Inhaltsverzeichnis 1. Prototyp-Beziehung 2. Proto...