уменьшить метод вызывает
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);
};
Сокращение вызовов функций и переменных кэширование может помочь много в старых браузерах, другое то, что код выглядит очень аккуратно.
Кажется, что не работает в Internet Explorer 8 и последнем Google Chrome. –
Попробуйте еще раз, подумайте, что я исправил его, похоже, не работал в Safari, что-то не так с управляемыми ресурсами jsfiddle. –
Одна из оптимизаций может заключаться в том, чтобы переключиться на [ex] Canvas ;-) – 2010-10-30 21:22:11