If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Tek bir parçacık

Bütün bir ParçacıkSistemi yapabilmek için, önce tek bir parçacığı tanımlayacak bir nesne yaratmalıyız. Haberler iyi: Bunu zaten yapmıştık. Kuvvetler kısmından  Mover nesnemiz mükemmel bir şablon görevi görür. Bize göre, bir parçacık ekranın etrafında hareket eden bağımsız bir kütledir. Konumu, hızı, ve ivmesi vardır, bu değişkenleri başlatan bir yapıcısı, ve kendisini display() ve konumunu update() için fonksiyonları vardır.
// Basit bir parçacık nesnesi
var Particle = function(position) {
  this.acceleration = new PVector();
  this.velocity = new PVector();
  this.position = position.get();
};

Particle.prototype.update = function(){
  this.velocity.add(this.acceleration);
  this.position.add(this.velocity);
};

Particle.prototype.display = function() {
  stroke(0, 0, 0);
  fill(175, 175, 175);
  ellipse(this.position.x, this.position.y, 8, 8);
};
Parçacık ancak bu kadar basitleşebilir. Buradan, parçacığımızı birkaç yönde geliştirebiliriz. Parçacığın davranışını etkilemek için, bir applyForce() yöntemi ekleyebiliriz (ilerideki bir örnekte aynen bunu yapacağız). Renk ve şekli tanımlamak için değişken ekleyebiliriz, veya parçacığı çizmek için image() kullanabiliriz. Ancak, şimdilik, sadece bir detay daha eklemeye odaklanalım: lifespan.
Tipik parçacık sistemleri, adına yayıcı denilen bir şey içerir. Bu yayıcı parçacıkların kaynağıdır ve parçacıkların konum, hız vesaire başlangıç ayarlarını denetler. Bir yayıcı bir tek parçacık patlaması, veya sürekli bir parçacık akışı, veya ikisini birden yapabilir. Asıl olay şudur, böyle bir tipik uygulamada, bir parçacık yayıcıda doğar ama sonsuza kadar yaşamaz. Sonsuza kadar yaşasaydı, parçacık sayısı zamanla hantal bir sayıya ulaştığında programımız sonunda dururdu. Yeni parçacıklar doğdukça, eski parçacıkların ölmesi gerekir. Bu, sonsuz parçacık akışı yanılsamasını oluşturur, ve programımızın performansı zarar görmez.
Bir parçacığın ne zaman öldüğüne karar vermenin birçok yolu vardır. Örneğin, başka bir nesneyle temas haline gelebilirdi, veya ekrandan çıkabilirdi. Ancak birinci Particle nesnemiz için, sadece bir timeToLive özelliği ekleyeceğiz. Bu bir zamanlayıcı gibi çalışacak, 255'ten 0'a sayacaktır, bu noktada parçacığı "ölü" olarak düşüneceğiz. Böylece, Particle nesnesini şu şekilde genişletebiliriz:
// Basit bir Particle nesnesi
var Particle = function(position) {
  this.acceleration = new PVector();
  this.velocity = new PVector();
  this.position = position.get();
  this.timeToLive = 255;
};

Particle.prototype.update = function(){
  this.velocity.add(this.acceleration);
  this.position.add(this.velocity);
  this.timeToLive -= 2;
};

Particle.prototype.display = function() {
  stroke(255, 255, 255, this.timeToLive);
  fill(127, 127, 127, this.timeToLive);
  ellipse(this.position.x, this.position.y, 8, 8);
};
timeToLive'i 255'ten başlatma ve 0'a geri sayma nedenimiz kolaylık sağlamaktır. Bu değerlerle, elipsin alfa şeffaflığı için de timeToLive 'i kullanabiliriz. Parçacık “öldüğünde” ekranda da solmuş olur.
timeToLive özelliği eklendiğinde, ekstra bir yöntem daha gerekir—parçacığın hayatta mı, ölü mü olduğuna dair (doğru veya yanlış cevabıyla) sorgulanan bir fonksiyon. Görevi parçacık listesini yönetmek olan ParticleSystem nesnesini yazarken bu işe yarayacaktır. Bu fonksiyonu yazmak gayet kolaydır; sadece timeToLive değerinin 0'dan küçük olup olmadığını kontrol etmemiz gerekir. Öyleyse, doğru veririz, değilse, yanlış veririz.
Particle.prototype.isDead = function() {
  if (this.timeToLive < 0) {
      return true;
  } else {
    return false;
  }
};
Birçok parçacık yapmak olan bir sonraki adıma geçmeden önce, parçacığın doğru çalıştığından emin olmak için bir tek Particle nesneli bir taslak oluşturmak önemlidir. Aşağıda, iki küçük eklemeyle tam kodu bulabilirsiniz. Hem update(), hem de display()'i çağıran adına run() denilen bir kolaylık yöntemi ekliyoruz. Buna ek olarak, (yerçekimi benzetimi için) parçacığa rastgele bir ilk hız ve aşağı doğru ivme veririz.
Artık tek bir parçacığı tanımlaran bir nesnemiz olduğuna göre, bir sonraki büyük adım için hazırız. Belirli bir zamanda kaç parçacık olduğundan tam olarak emin olmadığımızda, birçok parçacığı nasıl takip ederiz?