Neden'benim top (nesneler) t/kaybolan küçülen değil mi?
http://jsfiddle.net/goldrunt/jGL84/42/ bu hattan bu JS keman 84. Uncommenting hatları 141-146 tarafından topları için uygulanabilecek 3 farklı etkileri vardır. 'Bounce' etkisi olması gerektiği gibi çalışıyor, ama 'asplode' etkisi hiçbir şey yapmaz. 'Asplode içinde fonksiyon? küçültmek dahil etmeli miyim
// balls shrink and disappear if they touch
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);
}
}
CEVAP
Kodunuzu birkaç sorunu var.
İlk olarak, tanımı:
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
aramak için çalıştığınız update
shrink
içindeki kapsamında yerel ve kod erişilebilir değildir. JavaScript kapsamı fonksiyon-tabanlı, update
shrink
içimde yok çünkü olamaz asplode
. (In your console, bir hata gibi görürsünüz. Uncaught ReferenceError: asplode is not defined
.)
İlk yerine shrink
dışında asplode
hareketli deneyebilirsiniz:
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);
}
Ancak, kodunuzu daha bu soruyu kapsamı dışında olan konular vardır:
setInterval
bir işlev bekliyor.setInterval(shrink(p), 100)
setInterval
get neden olurdeğeri döndürürhemen çağırdıshrink(p)
. Muhtemelen istiyorumsetInterval(function() { shrink(p) }, 100)
Kodunuz
for (var i = 0; i < 100; i ) { p.radius -= 1; }
muhtemelen sizce ne yapmaz. Bu hemen azaltma işlemi 100 kez çalışacaksonragörsel olarak sonuç gösteriyor. Eğer her yeni boyutta yeniden oluşturma topu etmek istiyorsanız, ayrı bir zamanlama geri arama (setInterval
bir operasyon gibi) içindeki her birey azaltma yapmak gerekir..splice
sayısal bir dizin değil, bir nesne bekliyor.indexOf
bir nesnenin, bir sayısal dizin elde edebilirsiniz:balls.splice(balls.indexOf(p), 1);
İlacını ilk kez çalışır,
balls.splice
deyim zaten (tam olarak önce yaklaşık 100 MS civarında oldu) oldu. İstediğin bu değil sanırım. Bunun yerine, süreklisetInterval
tarafından çağrılan azaltma fonksiyonu olmalıdır ve son olarakp.radius == 0
sonraballs.splice(p,1)
gerçekleştirir.
Neden git benim yapılandırmaları değil...
Benim görüntü bulanık! Neden değil...
Neden değil't benim kesme çalışıy...
Neden Python easy_install benim Mac üz...
Neden't benim bash istemi güncell...