J'espère que vous allez tous bien!Utilisation de JavaScript Math. méthodes comme HTML Canvas .fillRect Coordonnées
J'ai passé toute la soirée à essayer de comprendre comment utiliser (Math.floor(Math.random())
comme coordonnées pour la méthode .fillRect
utilisée sur l'élément de canevas HTML.
J'ai regardé autour de ce site et en ligne pour une réponse, mais rien n'a été suggéré jusqu'à présent. Mon approche actuelle est basée sur this Stack Overflow answer.
Je veux dessiner un rectangle 20 * 20px à un point aléatoire sur la toile chaque fois que je clique sur un bouton. J'ai tout fonctionnant excepté alimentant les nombres aléatoires que je reçois des méthodes Math
dans les arguments de coordonnée .fillRect
.
Ceci est mon code HTML et mon code JS:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
$("#btn").click(function() {
var rectCoord = {
"x": (Math.floor(Math.random() * 699) + 1), //Canvas is 700px wide.
"y": (Math.floor(Math.random() * 599) + 1), //Canvas is 600px high.
};
console.log(rectCoord.x, rectCoord.y)
//Test. Random X and Y points log in console correctly.
ctx.fillRect(rectCoord.x, rectCoord.y, 20, 20);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<canvas id="canvas"></canvas>
<button id="btn">Click!</button>
</div>
Le console.log
était où je testais si:
1) Le "x" et "y" les points étaient randomisés à chaque clic, et
2) Les points de données rectCoord.x, rectCoord.y arrivaient correctement être utilisé dans une ligne de code suivante.
Les points randomisés se connectent bien à la console, et chaque fois que je mets juste des entiers pour les arguments de coordonnées dans fillRect
il dessine un rectangle parfaitement. Je ne peux pas comprendre comment insérer les points randomisés comme arguments dans .fillRect
. Pourquoi travaillent-ils en tant qu'arguments pour console.log
et non pour .fillRect
?
Merci beaucoup d'avance pour toutes les réponses, je suis assez nouveau pour le codage et je ne peux tout simplement pas envelopper ma tête autour de cela !! Toute aide est très appréciée!
Avez-vous essayé de placer 'ctx.fillStyle = « black'' ou quelque chose comme ça? –
Oui, cela ne fait pas de différence. 'fillStyle' est noir par défaut de toute façon, et quand je mets des nombres (par exemple 40, 500) pour les arguments de coordonnées, le code s'exécute comme il se doit. C'est pourquoi je pense que cela a quelque chose à voir avec moi en essayant d'utiliser une variable variable comme valeur de coordination. @PatrickRoberts – Pete
Vous devriez utiliser 'ctx.fillRect ((Math.random() * ctx.canvas.width-20) | 0, (Math.random() * ctx.canvas.height -20) | 0, 20, 20); 'pour assurer un 20 par 20 rectangle ** Always ** apparaît sur la toile. – Blindman67