


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!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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.

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.

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

TheasyncAttributeInHtmlisusedToloadandExexTernaljavaScriptFilesAsynchron und erlaubt theBrowsertodownloadthescriptinParallelWithhtmlParsingandexexecuteImitimed sofort-uponcompletion, welcheimprovespageloadperformanceBypreventReper-Blocker

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.

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

TheactionattributeSpecifieswheretosendtheFormdata und themethodattributedeFineshowtosenditusingHttpMethods.1.TheActionAttributeSthEsetSthestinationUrl (absolutororrelativ);
