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

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Системи от системи от частици

Нека да отделим момент за преговор до къде сме стигнали. Знаем как да говорим за отделната частица като обект Particle. Освен това знаем как да говорим за система от обекти Particle, което наричаме "система от частици". Вече дефинирахме една система от частици като колекция от независими обекти. Но самата система от частици не е ли също обект? Ако това е така (а то е така), няма причина да не можем да имаме колекция от много системи от частици, т.е. система от системи.
Този ред на мисли, разбира се, може да ни доведе дори по-далече и накрая може да се затвориш за няколко дни в мазето и да рисуваш диаграма на система от системи от системи от системи от системи от системи. От системи. В крайна сметка така работи светът. Един орган е ситема от клетки, човешкото тяло е система от органи, а един квартал е система от човешки тела, един град е система от квартали и т.н. Въпреки, че това е интересен път, по който да поемем, той излиза извън границите на това, което се опитваме да постигнем за момента. И все пак е доста полезно да знаем как да напишем програма, която да проследява много системи от частици, всяка от които да проследява много частици. Да разгледаме следния сценарий:
  • Започваш с празен екранn.
  • Кликваш с мишката и генерираш система от частици на мястото, където е била мишката.
  • Всеки път, когато кликнеш с мишката, се създава нова система от частици на мястото, на което е мишката.
Опитай самостоятелно:
Как бихме могли да напишем това с код? В предишната статия запазихме една референция към обекта ParticleSystem в променливата ps.
var ps = new ParticleSystem(new PVector(width/2, 50));

draw = function() {
  background(50, 50, 50);
  ps.addParticle();
  ps.run();
};
След като сега имаме няколко системи, броят на които е възможно да се увеличава постоянно, не искаме да ги запазваме в отделни именувани променливи. Вместо това ще използваме масив, за да проследяваме всички системи. Ще започнем с празен масив, когато програмата започне:
var systems = [];
При всяко кликване с мишката, се създава нов обект ParticleSystem и се запазва в масива:
mousePressed = function() {
  systems.push(new ParticleSystem(new PVector(mouseX, mouseY)));
};
А във функцията draw() вместо да използваме един обект ParticleSystem, ще обхождаме всички тези системи в масива и ще извикваме функцията run() върху всяка от тях.
draw = function() {
  background(50, 50, 50);
  for(var i = 0; i < systems.length; i++){
    systems[i].addParticle();
    systems[i].run();
  }
};
Сега опитай отново самостоятелно с кода, който написахме:

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.