http://jsfiddle.net/goldrunt/jGL84/42/ isto é da linha 84 neste violino de JS. Existem três efeitos diferentes que podem ser aplicados às bolas, removendo as linhas 141-146. O efeito 'devolver' funciona como deveria, mas o efeito 'devolver' não faz nada. Devo incluir a função 'encolher' dentro da função asplode?
// 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);
}
}
javascript
html
MattO
fonte
fonte
asplode
não é declarado no escopo global (ou em particular, não definido em um escopo acessível aupdate
); verifique nosso console.balls.splice()
com ump
.Uncaught ReferenceError: asplode is not defined
. A funçãoasplode()
não está visível.asplode
Não está no escopo direita,setInterval
deve receber uma referência de função,splice
precisa de um índice - ou talvez o mundo está apenas diminuindo com você jsfiddle.net/5f85bRespostas:
Seu código tem alguns problemas.
Primeiro, na sua definição:
asplode
é local para o escopo internoshrink
e, portanto, não é acessível para o código emupdate
que você está tentando chamá-lo. O escopo do JavaScript é baseado em funções, portanto,update
não pode ser vistoasplode
porque não está dentroshrink
. ( No seu console , você verá um erro como:.Uncaught ReferenceError: asplode is not defined
)Você pode primeiro tentar
asplode
sair deshrink
:No entanto, seu código tem vários outros problemas que estão fora do escopo desta pergunta:
setInterval
espera uma função.setInterval(shrink(p), 100)
causassetInterval
para obter o valor de retorno de invocação imediatashrink(p)
. Você provavelmente querSeu código
for (var i = 0; i < 100; i++) { p.radius -= 1; }
provavelmente não faz o que você pensa que faz. Isso executará imediatamente a operação de decremento 100 vezes e, em seguida, mostrará visualmente o resultado. Se você deseja renderizar novamente a bola a cada novo tamanho, será necessário executar cada decremento individual dentro de um retorno de chamada de tempo separado (como umasetInterval
operação)..splice
espera um índice numérico, não um objeto. Você pode obter o índice numérico de um objeto comindexOf
:Quando seu intervalo é executado pela primeira vez, a
balls.splice
declaração já aconteceu (aconteceu há cerca de 100 ms, para ser exato). Presumo que não é isso que você quer. Em vez disso, você deve ter uma função decrescente que é repetidamente chamadasetInterval
e finalmente executaballs.splice(p,1)
depoisp.radius == 0
.fonte
Isso não faz o que você pensa que faz. Isso chama
shrink
, passap
e depois passa o resultado parasetInterval
.shrink(p)
retornaundefined
, então essa linha não coloca nada em um intervalo.Você provavelmente quer:
fonte