//我是函数式编程的新手,这是使用函数式编程编写它的最佳方法。
var SQUARE_X = 101,
SQUARE_Y = 83;
// function to detect the enemy collison
function collisionDetect(axisA, axisB) {
var playerX = Math.floor(axisA.x / SQUARE_X);
var playerY = Math.floor(axisA.y / SQUARE_Y);
if (Array.isArray(axisB)) {
for (var i = 0; i < axisB.length; i += 1) {
var enemyX = Math.floor(axisB[i].x / SQUARE_X);
var enemyY = Math.floor((axisB[i].y) / SQUARE_Y);
if (enemyX === playerX && enemyY === playerY) {
return true;
}
}
} else {
var enemyX = Math.floor(axisB.x / SQUARE_X);
var enemyY = Math.floor((axisB.y) / SQUARE_Y);
if (enemyX === playerX && enemyY === playerY) {
return true;
}
}
};
答案 0 :(得分:1)
我不确定您对functional
的意思,但如果您只是想重构代码,请提供一些线索:
var SQUARE_X = 101,
SQUARE_Y = 83;
// function to detect the enemy collison
function collisionDetect(axisA, axisB) {
var playerX = Math.floor(axisA.x / SQUARE_X);
var playerY = Math.floor(axisA.y / SQUARE_Y);
return ([].concat(axisB)).some(function(ab) {
var enemyX = Math.floor(ab.x / SQUARE_X);
var enemyY = Math.floor(ab.y / SQUARE_Y);
if (enemyX === playerX && enemyY === playerY) {
return true;
}
return false;
});
}
这里的好处是代码更短,登录只放在1个位置,所以如果你需要更改它很容易。
不确定为什么你需要这里的功能。