2016-04-20 8 views
0

Ich habe eine Leinwand Quadrat wie folgt: draw.fillRect(sq); und davor: sq = "400, 400, 0, 0";. Die Konsole sagtJs canvas fillRect() Koordinaten als Variable funktioniert nicht

"Nicht genug Argumente zu CanvasRenderingContext2D.fillRect.".

Ich nehme an, das ist, weil es sq als ein Argument behandelt. Gibt es eine Möglichkeit, dies zu vermeiden? Um alle vier Argumente in einer Variablen zu speichern?

Vielen Dank im Voraus.

Antwort

0

Sie sind richtig, Ihre sq ist eine einzelne Zeichenfolge und daher als eine einzelne Variable behandelt. Stattdessen versuchen, wie ein Array zu verwenden:

var sq = [400, 400, 0, 0]; 

Und dann

draw.fillRect.apply(draw, sq); 

apply ruft Ihre Funktion mit den in sq vorgesehen Argumente. Weitere Informationen finden Sie unter Documentation for Function.prototype.apply bei MDN.


HINWEIS: Sie versuchen, ein Rechteck auf x = y = 400 mit width = heigth = 0 zu ziehen. Sie werden also nicht viel sehen, da die Größe Ihres Rechtecks ​​0 ist. Sie sollten also Ihre Parameter ändern. Schauen Sie sich die documentation of the .fillRect() Methode an.

0

Ihre Annahme ist richtig, "fillRect" benötigt 4 Argumente.

Hier ein Vorschlag, wie sie in einer Variablen speichern:

Var rectData = { 
"x": 400, 
"y": 400, 
"width": 0, 
"height": 0 
}; 

Und als es so verwenden:

draw.fillRect(rectData.x,rectData.y, rectData.width, rectData.height); 

Durch die Art und Weise: eine Breite/Höhe von 0 wahrscheinlich zu verwenden ist nicht was du willst. Sie werden kein Rechteck sehen :) Testen Sie zuerst Ihre Code-Snippets, z. in der Mozilla Developer Network.

Verglichen mit der 'Anwenden'-Lösung, macht die Verwendung eines Objektliterals Ihren Code lesbarer, so dass das Debuggen einfacher wird.

+0

Behoben. Ich quess MDN für JS existierte nicht die Zeit, die ich JS programmierte. Obwohl ich sagen muss, dass ich die Implikationen des Namens der URL 'w3fools' nicht mag. Es sollte ausreichen, um zu sagen, dass MDN auf lange Sicht die bessere Wahl ist, da w3schools für Anfänger gemacht wird. – Alex

+0

Ich stimme dir zu. Ich denke, W3School wurde in den letzten Jahren besser (wie auch MDN). Trotzdem sollte man immer mehrere Quellen überprüfen :) – Fidel90