Inhaltsverzeichnis
Bestimmen Sie den Endpunkt des Schwertes
Code -Implementierung
Vollständiger Codebeispiel
Heim Web-Frontend HTML-Tutorial Holen Sie sich Koordinaten des rotierenden Schwertes in HTML -Leinwand

Holen Sie sich Koordinaten des rotierenden Schwertes in HTML -Leinwand

Aug 22, 2025 pm 11:57 PM

Holen Sie sich Koordinaten des rotierenden Schwertes in HTML -Leinwand

Dieser Artikel zielt darauf ab, das Problem des Zeichnens eines Schwertes zu lösen, das sich mit einem Charakter in HTML -Leinwand dreht. Durch Analyse der Position des Arms des Charakters und der Kombination der Länge des Schwertes werden die Koordinaten der vier Endpunkte des Schwertes berechnet, wodurch die Wirkung des Schwertes mit dem Arm des Charakters gedreht wird. Dieser Artikel enthält detaillierte Code -Beispiele und -erklärungen, mit denen Entwickler diese Funktion verstehen und implementieren können.

In HTML -Leinwand, um den Effekt eines Charakters zu erreichen, das ein rotierendes Schwert hält, ist der Schlüssel, wie die Endpunktkoordinaten des Schwertes dynamisch berechnet werden, basierend auf der Armposition des Charakters. Das Folgende erläutert ausführlich, wie dieser Effekt erzielt werden kann.

Bestimmen Sie den Endpunkt des Schwertes

Zunächst müssen wir die vier Endpunkte des Schwertes bestimmen: den linken Startpunkt (LX, LY), den rechten Startpunkt (RX, RY), den linken Erweiterungspunkt (LSX, LSY) und den rechten Erweiterungspunkt (RSX, RSY). Die Ausgangspunkte der linken und rechten Hände entsprechen den Positionen der linken und rechten Hände des Charakters, während die Verlängerungspunkte basierend auf dem Startpunkt zuzüglich der Länge des Schwertes berechnet werden.

Code -Implementierung

Basierend auf dem ursprünglichen Code müssen wir die Methode der update () der Schwertklasse ändern, um die Endpunktkoordinaten des Schwertes korrekt zu berechnen.

 Klassenschwert {
  Konstruktor (LX, LY, RX, RY, Color, LSX, LSY, RSX, RSY) {
    this.lx = lx;
    this.ly = ly;
    this.rx = rx;
    this.ry = ry;
    this.lsx = lsx;
    this.lsy = lsy;
    this.rsx = rsx;
    this.rsy = rSy;
    this.color = color;
  }

  ziehen() {
    ctx.beginPath ();
    ctx.moveto (this.lx, this.ly);
    ctx.lineto (this.rx, this.ry);
    ctx.lineto (this.rsx, this.rsy);
    ctx.lineto (this.lsx, this.lsy);
    ctx.FillStyle = this.color;
    ctx.fill ();
    ctx.closepath ();
  }

  aktualisieren() {
    this.draw ();
    this.lx = lefthand.x;
    this.ly = lefthand.y;
    this.rx = righthand.x;
    this.ry = righthand.y;

    this.lsx = lefthand.x;
    this.lsy = lefthand.y;
    this.rsx = righthand.x Player.SwordLength;
    this.rsy = righthand.y Player.SwordLength;
  }
}

In der update () -Methode haben wir zuerst LX und LY auf lfthand.x und lefthand.y sowie rx und ry auf righthand.x und righthand.y gesetzt. Dann sind LSX und LSY auf lfthand.x und lfthand.y eingestellt.

Vollständiger Codebeispiel

Hier ist ein geändertes Beispiel für den vollständigen Code:

 var c = document.getElementById ("canvas");
var ctx = C.GetContext ("2D");

C.Width = Fenster.innernwidth;
C.Height = Fenster.InnerHeight;

var maus = {x: c.width / 2, y: c.Height / 2};

window.adDeVentListener ("Größe", Funktion (Ereignis) {
  C.Width = Fenster.innernwidth;
  C.Height = Fenster.InnerHeight;
});

window.addeventListener ("Mousemove", Funktion (Ereignis) {
  maus.x = event.clientX;
  maus.y = event.clienty;
});

Klassenspieler {
  Konstruktor (x, y, r, Farbe, v) {
    this.x = x;
    this.y = y;
    this.r = r;
    this.v = v;
    this.color = color;
    this.swordLength = 200;
  }

  ziehen() {
    ctx.beginPath ();
    ctx.arc (this.x, this.y, this.r, 0, 2 * math.pi, false);
    ctx.FillStyle = this.color;
    ctx.fill ();
    ctx.closepath ();
  }

  aktualisieren() {
    this.draw ();
    var dy = maus.y - this.y;
    var dx = maus.x - this.x;
    const angle = math.atan2 (dy, dx);

    var vx = math.cos (Winkel) * this.v;
    var vy = math.sin (Winkel) * this.v;

    if (math.abs (vx)> math.abs (dx)) {
      vx = dx;
    }

    if (math.abs (vy)> math.abs (dy)) {
      vy = dy;
    }
    this.x = vx;
    this.y = vy;
  }
}

Klasse litthand {
  Konstruktor (x, y, r, Farbe) {
    this.x = x;
    this.y = y;
    this.color = color;
    this.angle = 0;
    this.r = r;
    this.area = 40;
  }

  ziehen() {
    ctx.beginPath ();
    ctx.arc (this.x, this.y, this.r, 0, 2 * math.pi, false);
    ctx.FillStyle = this.color;
    ctx.fill ();
    ctx.closepath ();
  }

  aktualisieren() {
    this.draw ();
    this.x = Player.x this.area * Math.cos (this.angle / 180);
    this.y = Player.y this.area * math.sin (this.angle / 180);
    this.angle = 30;
  }
}

Klasse righthand {
  Konstruktor (x, y, r, Farbe) {
    this.x = x;
    this.y = y;
    this.color = color;
    this.angle = 90;
    this.r = r;
    this.area = 40;
  }

  ziehen() {
    ctx.beginPath ();
    ctx.arc (this.x, this.y, this.r, 0, 2 * math.pi, false);
    ctx.FillStyle = this.color;
    ctx.fill ();
    ctx.closepath ();
  }

  aktualisieren() {
    this.draw ();
    this.x = Player.x this.area * Math.cos (this.angle / 180);
    this.y = Player.y this.area * math.sin (this.angle / 180);
    this.angle = 30;
  }
}

Klassenschwert {
  Konstruktor (LX, LY, RX, RY, Color, LSX, LSY, RSX, RSY) {
    this.lx = lx;
    this.ly = ly;
    this.rx = rx;
    this.ry = ry;
    this.lsx = lsx;
    this.lsy = lsy;
    this.rsx = rsx;
    this.rsy = rSy;
    this.color = color;
  }

  ziehen() {
    ctx.beginPath ();
    ctx.moveto (this.lx, this.ly);
    ctx.lineto (this.rx, this.ry);
    ctx.lineto (this.rsx, this.rsy);
    ctx.lineto (this.lsx, this.lsy);
    ctx.FillStyle = this.color;
    ctx.fill ();
    ctx.closepath ();
  }

  aktualisieren() {
    this.draw ();
    this.lx = lefthand.x;
    this.ly = lefthand.y;
    this.rx = righthand.x;
    this.ry = righthand.y;

    this.lsx = lefthand.x;
    this.lsy = lefthand.y;
    this.rsx = righthand.x Player.SwordLength;
    this.rsy = righthand.y Player.SwordLength;
  }
}

const Player = neuer Spieler (C. Gwidth / 2, C.Height / 2, 30, "Blue", 10);

const lfthand = neuer lfthand (
  C. Width / 2 40 * Math.Cos (0/180),
  C.Height / 2 40 * Math.sin (0/180),
  10,,
  "Rot"
);

const righthand = neuer righthand (
  C. Width / 2 40 * Math.Cos (90/180),
  C.Height / 2 40 * Math.sin (90/180),
  10,,
  "Gelb"
);

const Sword = neues Schwert (
  C. Width / 2 40 * Math.Cos (0/180),
  C.Height / 2 40 * Math.sin (0/180),
  C. Width / 2 40 * Math.Cos (90/180),
  C.Height / 2 40 * Math.sin (90/180),
  "Schwarz",
  C. Width / 2 40 * Math.Cos (0/180),
  C.Height / 2 40 * Math.sin (0/180),
  C. Width / 2 40 * Math.Cos (90/180),
  C.Height / 2 40 * Math.sin (90 /180)
);

Funktion animate () {
  RequestAnimationFrame (Animate);
  ctx.clearRect (0, 0, C. Width, C.Height);
  Player.Update ();
  Lfthand.update ();
  Righthand.update ();
  SWORD.UPDATE ();
}

animieren();

HTML -Datei:

 

<kopf>
    <meta charset="utf-8">
    <meta name="viewPort" content="width = Gerätebreite, initial-scale = 1,0">
    <title> Canvas -Schwert </title>
    <styles>
        Körper {
            Rand: 0;
            Überlauf: versteckt; / * Verhindern Sie Scrollbars */
        }
        Leinwand {
            Anzeige: Block; / * Entfernen Sie den zusätzlichen Platz unter der Leinwand *//
        }
    


    <canvas id="canvas"> </canvas>
    <script src="canvas.js"> </script>

</styles></kopf>

Das obige ist der detaillierte Inhalt vonHolen Sie sich Koordinaten des rotierenden Schwertes in HTML -Leinwand. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Warum wird mein HTML -Bild nicht angezeigt? Warum wird mein HTML -Bild nicht angezeigt? Aug 16, 2025 am 10:08 AM

Überprüfen Sie zunächst, ob der SRC -Attributpfad korrekt ist, und stellen Sie sicher, dass der relative oder absolute Pfad mit dem Speicherort der HTML -Datei übereinstimmt. 2. Überprüfen Sie, ob der Dateiname und die Erweiterung korrekt geschrieben sind und fallsempfindlich sind. 3. bestätigen Sie, dass die Bilddatei tatsächlich im angegebenen Verzeichnis vorliegt. 4. Verwenden Sie geeignete ALT -Attribute und stellen Sie sicher, dass das Bildformat .jpg, .png, .gif oder .webp ist, das vom Browser weit verbreitet ist; 5. Fehlerbehebung bei Browser -Cache -Problemen, versuchen Sie, die Aktualisierung zu erzwingen oder direkt auf die Bild -URL zuzugreifen. 6. Überprüfen Sie die Berechtigungseinstellungen der Server, um sicherzustellen, dass die Datei gelesen und nicht blockiert werden kann. 7. Stellen Sie sicher, dass die IMG -Tag -Syntax korrekt ist, einschließlich der richtigen Zitate und der Attributreihenfolge, und schließlich beheben Sie 404 Fehler oder Syntaxprobleme über die Browser -Entwickler -Tools, um sicherzustellen, dass das Bild normal angezeigt wird.

Extrahieren Sie verschachtelte URLs aus dynamischen Webseiten mit R -Sprache: HTTPR- und API -Interaktionspraxis Extrahieren Sie verschachtelte URLs aus dynamischen Webseiten mit R -Sprache: HTTPR- und API -Interaktionspraxis Aug 27, 2025 pm 07:06 PM

In diesem Tutorial wird das Problem des Crawling -Fehlers untersucht, wenn JavaScript den Inhalt dynamisch lädt, wenn URLs von Webseiten mithilfe des R -Sprach -RVest -Pakets gekriecht. Der Artikel erläutert ausführlich, warum herkömmliche HTML -Parsingmethoden ungültig sind und eine effiziente Lösung darstellen: Durch das Identifizieren und direktes Aufrufen der API -Schnittstelle hinter der Webseite mithilfe des HTTR -Pakets, um JSON -Daten zu erhalten, wodurch die erforderlichen Informationen erfolgreich extrahiert werden.

Setzen Sie den Wert der Auswahl von HTML -Auswahl der HTML -Auswahl durch URL -Parameter dynamisch fest Setzen Sie den Wert der Auswahl von HTML -Auswahl der HTML -Auswahl durch URL -Parameter dynamisch fest Aug 20, 2025 pm 11:48 PM

In diesem Artikel wird angegeben, wie Sie Pure JavaScript verwenden, um die Auswahl der HTML-Dropdown-Menü automatisch basierend auf Abfrageparametern in der URL festzulegen. Durch Parsen der URL, um einen bestimmten Parameterwert zu erhalten und sie dem Wertattribut des Zielelements zuzuweisen, können Sie die Voreinstellung des Dropdown-Menüs erkennen, wenn die Seite geladen wird. Diese Methode erfordert keine JQuery, ist einfach und effizient und eignet sich für Szenarien, in denen Formelemente dynamisch gesteuert werden müssen.

So verwenden Sie das BDO -Tag, um die Textrichtung in HTML zu überschreiben So verwenden Sie das BDO -Tag, um die Textrichtung in HTML zu überschreiben Aug 16, 2025 am 09:32 AM

ThebdotagisusedTooverridethebrowrossersDefaultTextDirectionRenderingwhendealingWithmixedleft-to-Rightandright-to-Links-text-CorrectvisualDisplayByforcingaspecificDirectionusectionThedIrAttributeWithvalues "ltr" oder "rtl", asdemonstrattribute

So verwenden Sie das asynchrische Attribut für das Laden des Skripts in HTML So verwenden Sie das asynchrische Attribut für das Laden des Skripts in HTML Aug 17, 2025 pm 12:52 PM

TheasyncAttributeInHtmlisusedToloadandExexTernaljavaScriptFilesAsynchron und erlaubt theBrowsertodownloadthescriptinParallelWithhtmlParsingandexexecuteImitimed sofort-uponcompletion, welcheimprovespageloadperformanceBypreventReper-Blocker

So erstellen Sie mit HTML eine 'Scrollen nach oben' -Taste So erstellen Sie mit HTML eine 'Scrollen nach oben' -Taste Aug 28, 2025 am 03:45 AM

Erstellen Sie eine HTML -Schaltfläche und legen Sie das Klickenereignis fest, um die JavaScript -Funktion aufzurufen. 2. Verwenden Sie CSS, um die Schaltfläche in die untere rechte Ecke der Seite zu stecken und den versteckten Standardzustand einzustellen. 3. Hören Sie das Scroll -Ereignis über JavaScript an und zeigen Sie die Schaltfläche an, wenn die Scroll -Entfernung 300px überschreitet, und scrollen Sie beim Klicken reibungslos nach oben. Schließlich wird eine Rückkehr zur oberen Taste zur Verbesserung der Benutzererfahrung realisiert, und die volle Funktionalität wird in Zusammenarbeit mit HTML, CSS und JavaScript abgeschlossen.

So legen Sie einen Standardwert für ein HTML -Element ein So legen Sie einen Standardwert für ein HTML -Element ein Aug 17, 2025 pm 01:00 PM

Um den Standardwert für HTMLSelect -Elemente festzulegen, muss das entsprechende Optionselement mit dem ausgewählten Attribut gekennzeichnet sein. 1. Fügen Sie das ausgewählte Attribut der Option hinzu, die Sie standardmäßig auswählen möchten, z. B. UnitedStates. 2. Stellen Sie sicher, dass nur eine Option in einem einzelnen Auswahl das ausgewählte Attribut ausgewählt hat, und wenn mehrere eine vorhanden ist, ist die erste Quellcode -Reihenfolge. 3. Das ausgewählte Attribut kann überall in der Liste platziert werden, nicht auf die erste Option beschränkt. V. 5. Wenn Sie es dynamisch festlegen müssen, können Sie JavaScript verwenden, um das Wert -Attribut wie document.querySelec zu bedienen

HTML -Formaktion und Methodenattribute erklärt HTML -Formaktion und Methodenattribute erklärt Aug 25, 2025 am 09:16 AM

TheactionattributeSpecifieswheretosendtheFormdata und themethodattributedeFineshowtosenditusingHttpMethods.1.TheActionAttributeSthEsetSthestinationUrl (absolutororrelativ);

See all articles