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

Եթե գտնվում ես վեբ զտիչի հետևում, խնդրում ենք համոզվել, որ *.kastatic.org և *.kasandbox.org տիրույթները հանված են արգելափակումից։

Հիմնական նյութ

Մեկ մասնիկ

Ամբողջական ParticleSystem ստեղծելուց առաջ պետք է մեկ մասնիկ նկարագրող օբյեկտ ստեղծել։ Լավ լուրն այն է, որ դա արդեն արել ենք։ «Ուժեր» բաժնի Mover օբյեկտը շատ լավ կաղապար է. չէ՞ որ մեզ համար մասնիկը էկրանի վրա շարժվող անկախ մարմին է։ Այն ունի location, velocity, acceleration, այս փոփոխականներին արժեք տվող կառուցող, ինքն իրեն պատկերելու համար display() ֆունկցիա և իր տեղը թարմացնելու համար՝ update() ֆունկցիա։
// Պարզ Particle օբյեկտ
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);
};
Սա մասնիկի հնարավոր ամենապարզ տարբերակն է։ Այստեղից կարող ենք այն մի քանի ուղղությամբ զարգացնել։ Կարող ենք դրա շարժման վրա ազդող applyForce() ֆունկցիա ավելացնել. ապագա օրինակներից մեկում սա կանենք։ Կարող ենք գույնի ու տեսքի համար փոփոխականներ ավելացնել կամ մասնիկը image() ֆունկցիայի միջոցով նկարել։ Այնուամենայնիվ, առայժմ մեկ մանրամասնության վրա կենտրոնանանք՝ կյանքի տևողությունը (lifespan)։
Մասնիկների համակարգերը սովորաբար պարունակում են թողարկողներ։ Թողարկողը մասնիկների աղբյուրն է, որոշում է դրանց նախնական վիճակը, դիրքը, արագությունը և այլն։ Թողարկողը կարող է մեկ անգամ մասնիկներ բաց թողնել, շարունակաբար մասնիկներ բաց թողնել կամ երկուսն իրար հետ։ Կարևոր է նշել, որ այսպիսի կիրառման դեպքում սովորաբար թողարկողի աշխատանքի արդյունքում ստեղծված մասնիկն առհավետ չի ապրում։ Եթե առհավետ ապրեր, ապա մեր ծրագիրն ինչ-որ պահից կանգ կառներ, քանի որ մասնիկների քանակը չափազանց մեծ կլիներ։ Նոր մասնիկների ծննդյանը զուգահեռ՝ կարևոր է, որ հին մասնիկները մահանան։ Սրա արդյունքում ծրագիրը հանգիստ աշխատում է, և տպավորություն է ստեղծվում, որ անվերջ մասնիկներ կան։
Բազմաթիվ ձևեր կան՝ որոշելու, թե երբ պետք է մասնիկը մահանա։ Օրինակ՝ այն կարող է դիպչել այլ օբյեկտի կամ կարող է պարզապես էկրանից դուրս գալ։ Այնուամենայնիվ, մեր առաջին Particle օբյեկտում ավելացնելու ենք timeToLive հատկությունը։ Այն ժամանակաչափի դեր կստանձնի, 255-ից 0 կհաշվի, իսկ 0-ին հասնելուց հետո մասնիկը «մահացած» կհամարենք։ Հետևաբար, Particle օբյեկտն այսպես ենք ընդարձակում.
// Պարզ Particle օբյեկտ
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-ը կիրառել որպես էլիպսի թափանցիկության ալֆա գործակից։ Այսինքն, երբ մասնիկը «մահանա», այն կանհետանա էկրանից։
timeToLive հատկության հետ մեկտեղ պետք է ևս մեկ ֆունկցիա ավելացնել, որի միջոցով կարող ենք պարզել՝ մասնիկը կենդանի է, թե մահացած, և որը կվերադարձնի true կամ false արժեքները։ Սա օգտակար կլինի, երբ մասնիկների խումբ կարգավորող ParticleSystem օբյեկտ գրենք։ Շատ հեշտ է այս ֆունկցիան գրել. այն պետք է վերադարձնի true արժեքը, եթե timeToLive-ը 0-ից փոքր է։
Particle.prototype.isDead = function() {
  return this.timeToLive < 0;
};
Մասնիկներ ստեղծելու հաջորդ կետին անցնելուց առաջ լավ կլինի՝ վստահ լինենք, որ մասնիկը ճիշտ է աշխատում։ Դրա համար կարող ենք մեկ Particle օբյեկտ պարունակող ծրագիր ստեղծել։ Ստորև ներկայացնում ենք ծրագիրը, որի մեջ երկու կետ ենք ավելացրել։ Հարմարության համար ավելացնում ենք run() ֆունկցիան, որը կանչում է display() և update() ֆունկցիաները։ Դրանից բացի մասնիկներին փոխանցում ենք սկզբնական արագություն, ինչպես նաև դեպի ներքև ուղղված արագացում, որպեսզի ծանրության ուժ նմանակենք։
Քանի որ արդեն մեկ մասնիկ նկարագրող օբյեկտ ունենք, պատրաստ ենք առաջ անցնել։ Երբ չգիտենք, թե որ պահին քանի մասնիկ ունենք, ինչպե՞ս պետք է հետևենք բոլոր մասնիկներին։

Ուզո՞ւմ ես միանալ խոսակցությանը։

Առայժմ հրապարակումներ չկան։
Անգլերեն հասկանո՞ւմ ես: Սեղմիր այստեղ և ավելի շատ քննարկումներ կգտնես «Քան» ակադեմիայի անգլերեն կայքում: