在 EaselJs 中简化 table 代码

Simplify table code in EaselJs

我有一个 2x3 table,我正在添加到 EaselJS 中......目前我正在构建它:

for (var i = 0; i < 6; i++) {
    if(i == 1 || i == 3 || i == 5) {
       var xPos = playersBoxW;
    } else { 
       var xPos = 0;
    }
    if(i == 2 || i == 3) { 
       var yPos = playersBoxH;
    } else if (i == 4|| i == 5) { 
       var yPos = playersBoxH*2;
    } else { 
       var yPos = 0;
    }
    playerBox[i] = new createjs.Container().set({x: xPos, y: yPos});
}

这似乎是一种非常低效的方法,如果 table 增长,它就没有用了。还有其他人有简化这个的想法吗?

看看你的代码,我认为这个算法本质上是它归结为:

xPos 似乎等于 i(乘以 table 宽度)乘以 playersBoxW 的整数除法。例如,如果 i = 3 且宽度为 2,则 xPos 等于 playersBoxW 乘以 3/2 的整数除法,即 1.

yPos 似乎等于 i(乘以 table 高度)乘以 playersBoxH 的整数除法。例如,如果 i = 4 和高度 = 3,则 yPos 等于 playersBoxH 乘以 4/3 的整数除法,即 1.

function integerDivision(a, b) {
    return Math.floor(a / b);
}

function makeTable(width, height, player, arr) {
     var xPos, yPos, size = width*height;
     for (var i = 0; i < size; i++) {
          xPos = player.boxW  * integerDivision(i, width);
          yPos = player.boxH  * integerDivision(i, height);
          arr[i] = new createjs.Container().set({x: xPos, y: yPos});
     }
     return arr;
}

整数除法与常规除法类似,但您舍弃了余数。所以在这种情况下,我们将数字向下舍入: 3/2 = 1.5 => floor 结果(向下舍入)=> 1


侧节点: EaslJS 容器有时可能很昂贵,所以要小心使用它们。

Containers have some overhead, so you generally shouldn't create a Container to hold a single child. [easljs doc]

如果您只是想做 row/column 数学运算,有一种更简单的方法。

这是您的原始示例(使用一些代码使其工作)http://jsfiddle.net/u3ds24y5/

你可以用一个简单的方程推导出列和行。这使您可以轻松更改列数和总计数。

var column = i % num_columns;
var row = Math.floor(i / num_columns);
var x = column * column_width;
var y = row * row_height;

这是更新后的 fiddle:http://jsfiddle.net/u3ds24y5/1/

简化代码:

var cols = 2, total = 6; // Change these
for (var i = 0; i < total; i++) {
    var xPos = i % cols * playersBoxW,
        yPos = Math.floor(i/cols) * playersBoxH;
    // Create container, etc
}