уменьшить вызовы методов
var left1 = a.attr('x'),
left2 = b.attr('x'),
right1 = a.attr('x') + a.attr('width'),
right2 = b.attr('x') + b.attr('width'),
top1 = a.attr('y'),
top2 = b.attr('y'),
bottom1 = a.attr('y') + a.attr('height'),
bottom2 = b.attr('y') + b.attr('height');
Можно оптимизировать следующим образом:
var left1 = a.attr('x'),
left2 = b.attr('x'),
right1 = left1 + a.attr('width'),
right2 = left2 + b.attr('width'),
top1 = a.attr('y'),
top2 = b.attr('y'),
bottom1 = top1 + a.attr('height'),
bottom2 = top2 + b.attr('height');
Это сэкономит вам 4 вызова методов за hitDetection
вызов.То же относится и к wallDetection
и, возможно, к другим функциям.На самом деле, я также считаю, что вызовы ширины и высоты можно удалить и просто кэшировать с помощью замыкания, поскольку они довольно статичны после создания, см. Следующий пример.
Также со следующим битом:
var animateEnemies = function(enemy) {
var enemyWidth = enemy.attr('width'),
enemyHeight = enemy.attr('height'),
...
Вы устанавливаете ширину и высоту врагов один раз, так что они кажутся довольно постоянными, вы можете удалить поиск .attr()
и передать ширину и высоту из вызова createEnemies
.
var animateEnemies = function(enemy , enemyWidth , enemyHeight) {
var animationDuration = getRandomInt(1000, 3000) / difficulty;
enemy.animate({
x: getRandomInt(0, gameWidth - enemyWidth),
y: getRandomInt(0, gameHeight - enemyHeight)
}, animationDuration, "ease-in-out");
// use setTimout instead of onAnimation callback, since it gave "too much recursion" in Firefox 3.6
this.timeOut = setTimeout(function() {
animateEnemies(enemy , enemyWidth , enemyHeight);
}, animationDuration);
};
Сокращение вызовов функций и кэширование переменных может сильно помочь в старых браузерах, кроме того, код выглядит довольно аккуратно.