SORU
12 Aralık 2013, PERŞEMBE


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
12 Aralık 2013, PERŞEMBE


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 istiyorum

    setInterval(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ürekli setInterval tarafından çağrılan azaltma fonksiyonu olmalıdır ve son olarak p.radius == 0 sonra balls.splice(p,1) gerçekleştirir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Sorikan

    Sorikan

    3 ŞUBAT 2008