【发布时间】:2020-06-26 09:16:02
【问题描述】:
我想用 Pixi.js 动态地绘制一个网格(基于用户定义的大小)。 我的代码很简单:
let app, graphics;
const cellSize = 10;
initBoard();
updateGridAlgorithm(false, true, 53); //does work for values < 53
function initBoard() {
const width = window.innerWidth;
const height = window.innerHeight;
app = new PIXI.Application({
width: width,
height: 900,
backgroundColor: 0xffffff,
resolution: window.devicePixelRatio || 1,
autoResize: true,
antialias: true
});
document.body.appendChild(app.view);
graphics = new PIXI.Graphics();
app.stage.addChild(graphics);
}
function updateGridAlgorithm(randomStart, showGrid, iterations){
graphics.clear();
if(showGrid){
drawNewGrid(iterations);
}
}
function drawNewGrid(iterations){
const width = window.innerWidth;
const gridWidth = iterations * 2 + 1;
const startX = width/2 - gridWidth/2 * cellSize;
const startY = 20;
for (let i = 0; i < iterations; i++) {
for (let j = 0; j < gridWidth; j++) {
graphics.lineStyle(0.5, 0x999999);
graphics.drawRect(startX+j*cellSize, startY+i*cellSize, cellSize, cellSize);
}
}
}
此代码适用于小于 53 的值(请参阅代码中的注释)。对于高于此的值,似乎有一个常量限制可以绘制多少个矩形(~5461)。为了将其可视化,请使用更大的数字进行测试。
我还制作了一个JSFiddle 供您玩耍(建议:使用选项卡(行) 编辑器布局以获得最佳效果...)。
问题详解
对于低于 53 的值(例如 52 次迭代),我得到正确的结果,如下所示: 请注意,矩形的数量是 52*(52*2+1) = 5460,它小于 5461(相差 1 似乎纯属巧合)。
对于大于或等于 53 的值,不绘制网格末端的一些矩形。下图中缺少的矩形标记为红色: 根据我下面的分析,应该有 53*(53*2+1)-5461=210 个矩形缺失。
似乎最多可以绘制多少个矩形。我将尝试使用 194 次迭代粗略计算: 所以绘制的矩形数量是 14 * (194*2+1) + 15 = 5461,我怀疑这是可以绘制的矩形的最大数量。
对于其他迭代计数可以获得相同的数字,例如 209: 13 * (209 * 2 + 1) + 14。
具体问题
我想知道,为什么会出现上述问题以及如何解决它(例如,绘制超过 52 次迭代的完整网格)?
【问题讨论】:
标签: javascript pixi.js