我有一张2x3的桌子,我已经添加到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});
}
这似乎是一种非常低效的方式,如果表增长则没有用。其他人有想法简化这个吗?
答案 0 :(得分:1)
查看您的代码我认为这个算法基本上归结为:
xPos
似乎等于i
(按表格宽度)乘以playersBoxW
的整数除法。例如,如果i = 3
且宽度为2,那么xPos
等于playersBoxW
乘以3/2
的整数,即{1}。
yPos
似乎等于i
(按表格高度)乘以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
=&gt; floor
结果(向下舍入)=&gt; 1
边节点: EaslJS容器有时会很昂贵,所以要小心它们。
容器有一些开销,因此通常不应该创建容器来容纳单个子容器。 [easljs doc]
答案 1 :(得分:1)
如果你只是想做行/列数学,那么有一种更简单的方法。
以下是您的原始示例(包含一些使其可用的代码)http://jsfiddle.net/u3ds24y5/
您可以使用简单的等式推导出列和行。这使您可以轻松更改列数和总计数。
<svg width="200" height="150">
<defs>
<marker id="markerArrow" markerWidth="13" markerHeight="13" refX="2" refY="6" orient="auto">
<path d="M2,2 L2,11 L10,6 L2,2" style="fill: #000;" />
</marker>
</defs>
<path d='M0,0 L50,50 L100, 100' style='marker-mid:url(#markerArrow); stroke: #000'/>
<path d='M100,100 L125, 100 L150, 100' style='marker-mid:url(#markerArrow); stroke: #000' />
</svg>
这是一个更新的小提琴:http://jsfiddle.net/u3ds24y5/1/
简化代码:
var column = i % num_columns;
var row = Math.floor(i / num_columns);
var x = column * column_width;
var y = row * row_height;