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

তোমার যদি কোন ওয়েব ফিল্টার দেওয়া থাকে, তাহলে দয়া করে নিশ্চিত কর যে *.kastatic.org এবং *.kasandbox.org ডোমেইনগুলো উন্মুক্ত।

মূল বিষয়বস্তু

একটি একক কণা

একটি সম্পূর্ণ ParticleSystem (কণা ব্যবস্থা) তৈরি করার পূর্বে, আমাদেরকে এমন একটি অবজেক্ট তৈরি করতে হবে যা একটি particle (কণা) কে উপস্থাপন করে। মজার ব্যাপার হল আমরা ইতোমধ্যেই এটা করে ফেলেছি। বলের অনুশীলনীর Mover অবজেক্টটি এর জন্য পুরোপুরি উপযুক্ত। আমাদের কাছে কণা হল এমন একটি বস্তু যা পর্দায় (স্ক্রিন) স্বাধীনভাবে চলাফেরা করতে পারে। এর রয়েছে location (অবস্থান), velocity (বেগ) এবং acceleration (ত্বরণ), ঐ চলকগুলোকে তৈরি করার জন্য একটি কন্সট্রাক্টর এবং নিজেকে দৃশ্যমান করা ও অবস্থান আপডেট করার জন্য যথাক্রমে display()update() ফাংশন আছে।
// A simple Particle object
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);
};
এটা হল কণার (particle) একটি সাধারন নমুনা। এখান থেকে, আমরা ইচ্ছেমত কণাকে সাজাতে পারব। আমরা কণার এর নতুন বৈশিষ্ট্য হিসেবে একটি applyForce() মেথড যোগ করতে পারি (এটা অবশ্যই কিছুক্ষন পর করব)। আমরা এর রঙ ও আকৃতি চলকের মাধ্যমে প্রকাশ করতে পারি অথবা image() ব্যবহার করে কণা আঁকতে পারি। আপাতত একটি বাড়তি বৈশিষ্ট্যই যোগ করা যাক: lifespan (আয়ু)।
সাধারণ কণা ব্যবস্থায় একটি emitter (বিকিরণকারী) থাকে। Emitter বা বিকিরণকারী হল কণার মূল উৎস যা এর প্রাথমিক সেটিংস, অবস্থান, বেগ ইত্যাদি নিয়ন্ত্রন করে। একটি বিকিরণকারী একই সময়ে একগুচ্ছ কণা বা একটিনা কণার প্রবাহ অথবা দুইটি ই একসাথে বিকিরণ পারে। অর্থাৎ এইরকম একটি সাধারন ক্ষেত্রে, বিকিরণকারী থেকে একটি কণার উৎপত্তি হয় কিন্তু তা খুব বেশি সময় স্থায়ী হয় না। যদি এটা আজীবন স্থায়ী হত, তাহলে কণার সংখ্যা অস্বাভাবিকভাবে বেড়ে যেত এবং আমাদের প্রোগ্রামটি ধীরে ধীরে অচল হয়ে যেত। নতুন কণার জন্ম হলে, পুরাতন কণাগুলো শেষ হয়ে যাবে। এভাবে আমরা একটি দৃষ্টিভ্রম সৃষ্টি করব যাতে মনে হবে, এটা অসংখ্য কণার প্রবাহ এবং এজন্য আমাদের প্রোগ্রামের কোন সমস্যা হবে না।
একটি কণা কখন শেষ হয়ে যাবে আমরা তা বিভিন্ন উপায়ে নির্ধারণ করতে পারি। উদাহরণস্বরূপ, এটা অন্য কোন অবজেক্ট এর সংস্পর্শে হতে পারত বা এটা পর্দা থেকে এমনিতেই চলে যেতে পারত। যাই হোক, আমাদের প্রথম Particle (কণা) অবজেক্টের জন্য, আমরা একটি timeToLive (আয়ুষ্কাল) বৈশিষ্ট্য যোগ করবো। এটা একটি সময় নির্ধারকের মত কাজ করবে, 255 থেকে 0 পর্যন্ত গুনবে, যেই সময়ে আমরা ধরে নেব কণা টি "শেষ।" এখন তাহলে আমরা Particle (কণা) অবজেক্টটিতে কোড যোগ করি:
// A simple Particle object
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 255 থেকে শুরু করে, 0 তে গিয়ে শেষ করেছি । এই মানগুলোর সাহায্যে, আমরা timeToLive কে উপবৃত্তটির স্বচ্ছতার মাপকাঠি হিসেবে ব্যবহার করতে পারব। যখন কণাটি "শেষ" হয়ে যাবে তখন এটি পর্দা থেকে মুছে যাবে।
With the addition of the timeToLive property, we’ll also need one additional method—a function that can be queried (for a true or false answer) as to whether the particle is alive or dead. This will come in handy when we are writing the ParticleSystem object, whose task will be to manage the list of particles themselves. Writing this function is pretty easy; it just needs to return true if the value of timeToLive is less than 0.
Particle.prototype.isDead = function() {
  return this.timeToLive < 0;
};
পরবর্তীতে অনেকগুলো কণা তৈরির ধাপে যাওয়ার আগে, আমরা একটু সময় নিয়ে নিশ্চিত হই যে, আমাদের কণা ঠিকঠাক কাজ করছে কিনা এবং একটিমাত্র Particle অবজেক্ট দিয়ে একটি নমুনা তৈরি করতে করি। নিচে পুরো কোডটি দেওয়া আছে, সেই সাথে দুইটি ছোট কোড যোগ করা হয়েছে। আমরা আমদের সুবিধার জন্য run() নামে একটি মেথড নিয়েছি যার কাজ হল update() এবং display() উভয়কে কল করা। এর সাথে, আমরা কণাকে যেকোন প্রাথমিক বেগ দিতে পারি এবং একটি নিম্নমুখী ত্বরণও (অভিকর্ষ বোঝানোর জন্য) প্রয়োগ করতে পারি।
যেহেতু আমরা একটি কণার জন্য অবজেক্টটি তৈরি করে ফেলেছি, আমরা তাই পরবর্তী ধাপে যাওয়ার জন্য প্রস্তুত। আমরা কীভাবে অনেকগুলো কণার দিকে লক্ষ্য রাখব, যখন আমরা এটাই নিশ্চিত করতে পারছি না যে একটি নির্দিষ্ট সময়ে কতগুলো কণা থাকতে পারে?