ძირითადი მასალა
კომპიუტერული პროგრამირება
კურსი: კომპიუტერული პროგრამირება > თემა 5
გაკვეთილი 8: ნაწილაკთა სისტემები- შესავალი ნაწილაკთა სისტემებში
- მხოლოდ ერთი ნაწილაკი
- გამოწვევა: დაცვენილი ფოთლები
- ნაწილაკთა სისტემა
- გამოწვევა: თევზის ბუშტუკები
- ნაწილაკთა სისტემების სისტემები
- გამოწვევა: ცეცხლის წამკიდებელი
- ნაწილაკთა ტიპები
- გამოწვევა: ჯადოსნური ქვაბი
- ნაწილაკთა სისტემები და ძალები
- გამოწვევა: მდინარის ქვები
- პროექტი: არსებათა კოლონიები
© 2023 Khan Academyგამოყენების პირობებიკონფიდენციალურობის პოლიტიკაშენიშვნა ქუქი-ჩანაწერებზე
მხოლოდ ერთი ნაწილაკი
სანამ მთელ
ParticleSystem
-ს (ნაწილაკების სისტემას) შევქმნით, უნდა შევქმნათ ობიექტი, რომელიც აღწერს ცალკეულ ნაწილაკს. კარგი ამბავი მაქვს: ჩვენ ეს უკვე გავაკეთეთ. ჩვენი Mover
ობიექტი (ძალების სექციიდან) გამოგვადგება სრულყოფილ თარგად. ჩვენთვის ნაწილაკი არის დამოუკიდებელი სხეული, რომელიც ეკრანზე გადაადგილდება. მას გააჩნია location
(ადგილმდებარეობა), velocity
(სიჩქარე) და acceleration
(აჩქრება), კონსტრუქტორი ამ ცვლადების ინიციალიზაციისათვის, ფუნქციები display()
საკუთარი თავის ეკრანზე გამოსაჩენად და update()
ადგილმდებარეობის განახლებისთვის.// მარტივი ნაწილაკის ობიექტი
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()
ფუნქცია. მიუხედავად ამისა, ჯერჯერობით მხოლოდ ერთი დამატებითი დეტალი დავამატოთ: სიცოცხლის ხანგრძლივობა.ნაწილაკთა ტიპური სისტემები მოიცავენ გამომსხივარს. გამომსხივარი არის ნაწილაკების წყარო და აკონტროლებს ნაწილაკების თავდაპირველ პარამეტრებს, როგორებიცაა ადგილმდებარეობა, სიჩქარე და ა.შ. გამომსხივარს შეუძლია, კონკრეტულ დროს გამოასხივოს ნაწილაკების ერთი ნაკადი, ან განუწყვეტლივ ასხივოს ისინი, ან ქნას ორივე. აზრი ისაა, რომ ტიპურ იმპლემენტაციაში, როგორზეც ახლა ვსაუბრობთ, ნაწილაკი იბადება გამომსხივარში, მაგრამ არ ცოცხლობს სამუდამოდ. სამუდამოდ რომ ცოცხლობდეს, ჩვენი პროგრამა საბოლოოდ შეწყვეტდა მუშაობას, რადგან ნაწილაკების რაოდენობა დროთა განმავლობაში ძალიან დიდ რიცხვს მიაღწევდა. ახალი ნაწილაკების დაბადებასთან ერთად გვჭირდება ძველი ნაწილაკების „კვდომა“. ეს ქმნის უთვალავი ნაწილაკის ნაკადის ილუზიას და ჩვენი პროგრამაც უპრობლემოდ მუშაობს.
ნაწილაკის სიკვდილის დროის განსაზღვრისთვის მრავალი გზა არსებობს. მაგალითად, როცა ის შეეხება სხვა ობიექტს, ან გავა ეკრანიდან. მიუხედავად ამისა, ჩვენი პირველი
Particle
ობიექტისთვის ჩვენ, უბრალოდ, დავამატებთ timeToLive
(სიცოცხლის ხანგრძლივობა) თვისებას. ის წამმზომივით მოიქცევა, დაითვლის 255-იდან 0-მდე, 0-ზე ჩამოსვლისას კი ჩვენ ნაწილაკს დავარქმევთ „მკვდარს“. შესაბამისად, 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
(სიცოცხლის ხანგრძლივობის) თვისების დამატებასთან ერთად დაგვჭირდება კიდევ ერთი დამატებითი მეთოდი — ფუნქცია, რომლის მოთხოვნაც შეგვეძლება (რომელიც დაგვიბრუნებს „ჭეშმარიტს“ ან „მცდარს“), რათა გავიგოთ, ნაწილაკი ცოცხალია თუ მკვდარი. ეს გამოგვადგება, როცა დავიწყებთ ParticleSystem
ობიექტის წერას, რომლის მიზანიც იქნება ნაწილაკების სიის განკარგვა. ამ ფუნქციის დაწერა საკმაოდ იოლია; მან უნდა დააბრუნოს true (ჭეშმარიტი), თუ timeToLive
-ის მნიშვნელობა არის 0-ზე ნაკლები.Particle.prototype.isDead = function() {
return this.timeToLive < 0;
};
სანამ ბევრი ნაწილაკის შექმნას დავიწყებდეთ, დავრწმუნდეთ, რომ ჩვენი ნაწილაკი სწორად მუშაობს და შევქმნათ ესკიზი ერთი
Particle
ობიექტით. სრული კოდი მოცემულია ქვემოთ ორი მცირე დამატებით. ვამატებთ დამხმარე მეთოდს, სახელად run()
-ს, რომელიც, უბრალოდ, იძახებს update()
-სა და display()
-ს. დამატებით, ნაწილაკს ვაძლევთ შემთხვევითად შერჩეულ საწყის სიჩქარესა და ქვემოთ მიმართულ აჩქარებას (გრავიტაციის სიმულირებისთვის).ახლა, როცა გვაქვს ობიექტი ერთი ნაწილაკის აღსაწერად, მზად ვართ, გადავდგათ შემდეგი დიდი ნაბიჯი. როგორ ვადევნოთ თვალყური ბევრ ნაწილაკს, როდესაც არ ვიცით, რამდენი ნაწილაკი შეიძლება გვქონდეს დროის ნებისმიერ მოცემულ მომენტში?
გსურთ, შეუერთდეთ დისკუსიას?
პოსტები ჯერ არ არის.