У вашого коду є кілька проблем.
По-перше, у вашому визначенні:
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
}
asplode
є локальним для сфери дії всередині shrink
і тому недоступний для коду, у update
якому ви намагаєтесь його зателефонувати. Область JavaScript заснована на функціях, тому update
її не можна побачити, asplode
оскільки вона не знаходиться всередині shrink
. ( У вашій консолі ви побачите помилку типу:. Uncaught ReferenceError: asplode is not defined
)
Ви можете спробувати спробувати перейти asplode
за межі shrink
:
var shrink = function(p) {
for (var i = 0; i < 100; i++) {
p.radius -= 1;
}
}
function asplode(p) {
setInterval(shrink(p),100);
balls.splice(p, 1);
}
Однак у Вашого коду є ще кілька проблем, які не входять у рамки цього питання:
setInterval
очікує функцію. setInterval(shrink(p), 100)
викликає , setInterval
щоб отримати значення, що повертається з негайного виклику shrink(p)
. Ви, мабуть, хочете
setInterval(function() { shrink(p) }, 100)
Ваш код, for (var i = 0; i < 100; i++) { p.radius -= 1; }
ймовірно, не робить те, що ви думаєте, що це робить. Це негайно запустить операцію декременту 100 разів, а потім візуально покаже результат. Якщо ви хочете повторно віддати кульку при кожному новому розмірі, вам потрібно буде виконати кожне окреме зменшення в окремому зворотному зворотному дзвінку (як setInterval
операція).
.splice
очікує числовий індекс, а не об'єкт. Ви можете отримати числовий індекс об'єкта за допомогою indexOf
:
balls.splice(balls.indexOf(p), 1);
На той час, коли ваш інтервал працює вперше, balls.splice
твердження вже сталося (це було близько 100 мс тому, якщо бути точним). Я припускаю, що це не те, чого ти хочеш. Натомість у вас повинна бути функція декрементування, яка неодноразово викликається setInterval
і, нарешті, виконується balls.splice(p,1)
після p.radius == 0
.
asplode
не декларується в глобальному масштабі (або, зокрема, не визначено у доступній для нього галузіupdate
); перевірте нашу консоль.