OOP WorkShop 19.02 Particles


4
Здравейте,
Днешния workshop за Particles ми беше изключително интересен, защото съм работил с Particles Plugins за After Effects.
Исках само да споделя част от готините неща, които могат да се правят и се правят в индустрията с Particles. Доста от нещата, които писахме днес ги има точно като опции в plugin-ите - Source (Emitter) и Attractor, живот на частиците, големина, скорост, ускорение и т.н.
Сметнах, че ще бъде интересно :)
http://www.videocopilot.net/tutorial/speed_particles/ - започва от 3:50
http://www.youtube.com/watch?v=sLgoCEHN-64 - последните секунди
http://www.youtube.com/watch?v=2Qb9t-FOYEI

в C# OOP от FractaL (309 точки)


Отговори



0
В системата вече има презентация с домашна работа, но някой знае ли в кой от двата Solution-а трябва да пишем? В демото което Жоро попълваше по-време на самия Workshop или в скелета?

от dimo.petrof (2887 точки)


0
В това което е написано, тоест в лайв демото.

от H.Tsekov (769 точки)

0
Според мен, за да напишем домашното, първо трябва да сме написали всички неща, които писахме на лекцията с Жоро (т.е. в демото, а не скелета).

от kulin_1987 (270 точки)


3

Ето моето решение за направата на новите частици - цък,

Сравнително лесно постижимо. Правя по един клас за всяка допълнителна частица. ChaoticParticle наследява Particle, а ChickenParticle наследява Chaoticparticle.

В ChaoticParticle примам един рандом, за да си променям скоростта на случаен принцип. Направил съм един метод, който връща скоростта и в Update() метода я присвоявам на скоростта на частицата.

В ChickenParticle правя почти същото с изключение, че съм задал константен шанс от 40%, при който частицата спира - скоростта и става равна на (0,0). Тази скорост също съм я дефинирал в една константна промоенлива. Ако съм в рамките на тези проценти правя скороста равна на (0,0), ако ли пък не си викам базовия метод за генериране на случайна скорост. Също така в Update() проверявам дали пилето е спряло и ако е така добавям ново пиле към списъка с частици, който Update() връща.

За частицата, която отблъсква други частици приемам освен позиция и скорост един допъленителен параметър радиус. Ползвам го, за да знам колко близо трябва да дойде до отблъсквателя някоя друга частица преди да я отблъсна.


от lostm1nd (846 точки)


0
То хубаво, но как имаш достъп да set-ваш speed? При мен е private set ... Update: Сега видях, че има разлика в демата ...

от dimo.petrof (2887 точки)

0
Аз принципно направо си свалих началното и сам си го писах заедно с лекцията, но при private set може да се ползва метода за ускорение, както съм напрвил в RepulsionParticleUpdater.

от lostm1nd (846 точки)



1

Колеги, обърщам ви вниманеие на нещо от двете дема на WorkShop-а, а именно, че има разлика, която е съществена за домашното:

В едното на което пише ParticleSystem-LiveDemo (19 февруари 2014):

Пропъртито Speed на Particle e public MatrixCoords Speed { get; protected set; }

В ParticleSystem-LiveDemo-Advanced (20 февруари 2014) обаче е public MatrixCoords Speed { get; private set; }

 

от dimo.petrof (2887 точки)


3

Ето как реших проблема със Speed (private set) от втория Workshop: 
http://pastebin.com/66CzkCkV
 


от d.kostov88 (1086 точки)


0
Хитро си се досетил за Work Around ;)

от mita4itu (1969 точки)


0

Задачата е доста интересна. Ноо, започнах с едни чуденки.

За ChaoticParticle аз също първо направих решение като на колегата lostm1nd, ChaoticParticle наследява Particle. Но ме дразни, че методът GetRandomSpeed() си е чисто повторение на метода GetRandomCoords() на ParticleEmitter.

Ако ChaoticParticle се направи наследник на ParticleEmitter, например - така, избягваме това повторение, но губим контрол върху промяната на скоростта ( тя е закована на const int MaxSpeedPerCoordinate = 2; от ParticleEmitter). И нямаме право да променяме вече готовите класове.

Как мислите, има ли начин да се прескочи тази константа?

 

 

 


от Nailses (45 точки)


0
Моето решение:
https://github.com/hudsonvsm/Teleric-Academy/tree/Particle-System/ParticleSystem/ParticleSystem
ChaoticParticle и ParticleRepeller лесно станаха.
ChaoticParticle има допълнителен Random, който променя посоката.
ParticleRepeller има допълнителен клас ParticleRepellerUpgdater, в който отблъскваме частиците и е наследник на AdvansedParticleUpdater, който е нужен на ParticleAttractor. Работата е сходна на ParticleAttractor, ама наопаки. :)
ChickenParticle е това вече не можах да го измисля правилно. Не мога да накарам кокошката да спре за няколко тика, защото тя не знае че има такива. Може би ако се направи допълнителен ChickenParticleUpdater, в който и казваме да чака няколко тика, ама как?

от hudsonvsm (25 точки)


2

Ето го и моето решение

За ChaoticParticle взимам 2 променливи за това колко често скоростта по Х и У да се обръща. (Accelerate (new MatrixCoords(this.Speed.Row * (-2) , this.Speed.Col * (-2));)

За ChickenParticle взимам 2 променливи колко често да спира и за колко време.

За RepellerParticle взимам 2 променливи - едната си е power която се наследява а другата radius


от dzhenko (3893 точки)