javascript - 如何使用 for 循环创建额外的一排方形块
问题描述
新手在这里和java脚本。我正在尝试创建 5 行和 5 列的方块,但我只能设法创建一行。我可以问我的代码缺少什么吗?感谢帮助。
let x = 0;
let y = 0;
for (let i = 1; i <= 5; i++) {
y += 0;
for (let j = 1; j < + 5; j++) {
drawGridBoard(x, y, 50, 50)
x = 50;
}
}
解决方案
让我们检查一下您的循环。
外循环:
for (let i = 1; i <= 5; i++) {
y += 0;
}
递增i直到它为 5 并且在每个循环中它递增 y
内循环:
for (let j = 1; j < + 5; j++) {
drawGridBoard(x, y, 50, 50)
x = 50;
}
递增j直到它为 5,drawGridBoard
使用参数x和y调用,最后将x设置为 50。
如果我们替换drawGridBoard()
为,console.log(x,y);
我们可以看到发生了什么:
0,0
50,0
50,0
50,0
50,0
50,0
如您所见,x 和 y 将分别保持在 50 和。为什么?因为您不使用 for 循环变量i和j来计算适当的屏幕位置。
每增加一次,j
我们希望将 x 位置向右移动 50 个像素
x + j * 50
每增加一次,i
我们希望将 y 位置向下移动 50 个像素
y + i * 50
把它们放在一起:
let x = 0;
let y = 0;
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
function drawGridBoard(x, y, width, height) {
ctx.fillRect(x, y, width, height);
}
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
drawGridBoard(x + j * 50, y + i * 50, 50, 50);
}
}
<canvas id="canvas"></canvas>
推荐阅读
- mysql - SQL,按一列与一列不同的列分组
- amazon-web-services - AWS Lex AMAZON.DATE 槽类型以美国格式解析日期
- for-loop - Java 使用 For 循环
- file - 如何根据文本文件选择文件并创建bat文件?
- laravel - Laravel nova,自定义资源工具不出现在编辑模式下
- r - 有没有一种简单的方法可以从上传的数据集中生成一段 UI?
- python - Python:“GetContextWebInformation”更新 SharePoint 列表项
- apache-spark - 根据现有列中的值将 Spark DataFrame 分区为选定数量的分区
- javascript - 如何使用RequireJS加载需要认证的服务端模块?
- ios - 为什么在 convertDataWithCompletionHandler 函数中使用 completionHandlerForConvertData 闭包?