الشروع في العمل مع مكتبة الرسوم المتحركة Mojs: The Burst Module
Arabic (العربية/عربي) translation by Hamdan Veerlax (you can also view the original English article)
لقد بدأنا هذه السلسلة من خلال تعلم كيفية تحريك عناصر HTML باستخدام mojs. في البرنامج التعليمي الثاني ، انتقلنا إلى الرسوم المتحركة لأشكال SVG المضمنة باستخدام وحدة الشكل
. غطى البرنامج التعليمي الثالث المزيد من الطرق لتحريك أشكال SVG باستخدام وحدات ShapeSwirl
و stagger
.
الآن ، سوف نتعلم كيفية تحريك أشكال SVG مختلفة في تشكيل انفجار
باستخدام وحدة الاندفاع. يعتمد هذا البرنامج التعليمي على المفاهيم التي قمنا بتغطيتها في الدروس الثلاثة السابقة. إذا كنت لم تقرأها بالفعل ، فأقترح أن تمر بها أولاً.
خلق الرسوم المتحركة الأساسية انفجر
أول شيء يتعين علينا القيام به قبل أن نتمكن من إنشاء أي رسوم متحركة من الاندفاع هو إنشاء كائن انفجر
. بعد ذلك ، يمكننا فقط تحديد قيم خصائص مختلفة للتحكم في كيفية تشغيل الرسم المتحرك. أسماء الكثير من الممتلكات في الوحدة النمطية للاندفاع
هي نفس الخصائص في الوحدة النمطية للشكل
. ومع ذلك، هذه الخصائص بمهام مختلفة جداً في هذه الحالة.
تحدد الخواص اليمنى
واليسرى
الوضع الأولي للرشقة بدلاً من الجسيمات الموجودة بداخله. وبالمثل ، تحدد الخواص x
و y
تغيير الرشقة بالكامل بدلاً من الجسيمات الفردية.
يتم التحكم في نصف قطر الدائرة المتكون من جميع جزيئات الرشقة بواسطة خاصية نصف القطر
. هذا يختلف كثيرًا عن خاصية نصف قطر
الأشكال الفردية ، والتي تحدد حجم تلك الأشكال. في حالة الرشقة ، يحدد نصف القطر مدى التباعد بين الأشكال الفردية الموجودة فيه.
يمكن تحديد عدد الأشكال أو الجسيمات في رشقة واحدة باستخدام خاصية العد
. بشكل افتراضي ، سيكون هناك خمسة جسيمات في كل رشقة تقوم بإنشائها. كل هذه الجسيمات متساوية بالتساوي على محيط الرشقة. على سبيل المثال ، إذا كان هناك أربعة جسيمات ، فسيتم وضعها على 90 درجة لبعضها البعض. إذا كان هناك ثلاثة جسيمات ، سيتم وضعها على 120 درجة.
إذا كنت لا تريد أن تغطي جسيمات الاندفاع كامل 360 درجة ، فيمكنك تحديد الجزء الذي يجب تغطيته باستخدام خاصية الدرجة
. أية قيمة أعلاه 0 غير صالحة لهذه الخاصية. وسيتم توزيع عدد معين من الدرجات بالتساوي بين جميع الجسيمات. إذا كانت قيمة درجة ما يزيد على 360، قد تتداخل الأشكال.
يحدد الزاوية المحددة باستخدام الخاصية زاوية زاوية
الجامع الاندفاع. في هذه الحالة، لا يتم استدارة الجزيئات الفردية حول مركز الخاصة بهم ولكن حول مركز الانفجار. هذا مماثل لكيف تدور الأرض حول الشمس، والذي يختلف عن دوران الأرض حول محورها الخاص.
خاصية حجم
جداول قيمة جميع الخصائص الفيزيائية للاندفاع والأشكال الفردية بدورها. تماما مثل الخصائص الأخرى الاندفاع، سوف تحجيم كافة الأشكال في ذلك مرة واحدة. إعداد حجم
الاندفاع إلى 3 سوف يزيد نصف قطرها الجامع انفجر فضلا عن حجم الأشكال الفردية 3.
في التعليمات البرمجية المتكررة التالية، نقوم بإنشاء خمس رشقات نارية مختلفة باستخدام خصائص ناقشنا فقط.
1 |
var burstA = new mojs.Burst({ |
2 |
count: 20 |
3 |
});
|
4 |
|
5 |
var burstB = new mojs.Burst({ |
6 |
angle: { |
7 |
0: 360 |
8 |
},
|
9 |
scale: { |
10 |
1: 2 |
11 |
},
|
12 |
radius: 10 |
13 |
});
|
14 |
|
15 |
var burstC = new mojs.Burst({ |
16 |
angle: { |
17 |
0: 360 |
18 |
},
|
19 |
scale: { |
20 |
1: 2 |
21 |
},
|
22 |
radius: { |
23 |
10: 100 |
24 |
}
|
25 |
});
|
26 |
|
27 |
var burstD = new mojs.Burst({ |
28 |
degree: 180, |
29 |
radiusX: 10, |
30 |
angle: -90, |
31 |
scale: { |
32 |
1: 2 |
33 |
},
|
34 |
radius: { |
35 |
10: 100 |
36 |
}
|
37 |
});
|
38 |
|
39 |
var burstE = new mojs.Burst({ |
40 |
count: 20, |
41 |
degree: 3600 |
42 |
});
|
يمكنك أن ترى أن بورستاA
وبرستE
تختلف فقط في عدد الدرجات التي لديهم لتغطية. نظراً للجسيمات في بورستاA
لتغطية 360 درجة (القيمة الافتراضية)، فإنها توضع 360/20 = 18
درجة عن بعضها البعض. من ناحية أخرى، توضع الجسيمات في burstE
3600/20 = 180
درجة عن بعضها البعض. ابتداء من الصفر، يتم وضع الجسيمات الأولى في درجة صفر، والتالي يوضع في 180 درجة.
ثم يوضع الجزء الثالث في 360 درجة، الذي هو أساسا يساوي 0 درجة. ثم يتم وضع الجزء الرابع في درجة 540، ولكن هذا أساسا يساوي 180 درجة. وبعبارة أخرى، يتم وضع جميع الجسيمات المرقمة فردياً في 0 درجة، وتوضع جميع الجسيمات عدد زوجي في 180 درجة. وفي النهاية، تشاهد فقط جزيئات اثنين لجميع الآخرين يتراكب مع الأولين.
من المهم أن نتذكر أنه لا يمكن التحكم مباشرة وظيفة المدة أو تأخير أو تخفيف الرسوم المتحركة الاندفاع. الوحدة النمطية تحدد جميع هذه القيم تلقائياً استناداً إلى قيم مختلفة من الأطفال يتم تحريكها.
التعامل مع الفرد انفجر الجسيمات
حتى الآن في هذا البرنامج التعليمي، كان جميع الجسيمات في انفجار الحركة نفسها تنطبق عليهم. زاوية ومقياس ونصف قطرها وموقف كل شيء تم تغييرها بنفس القيمة. وعلاوة على ذلك، نحن لم تكن قادرة على التحكم في المدة والتأخير من الجزيئات الفردية أو الاندفاع ككل. وحدة انفجر
مويس ليس لديه مجموعة من الخصائص التي يمكن تغيير جميع هذه القيم بشكل مباشر. ومع ذلك، يمكننا تحديد قيمة الرسوم المتحركة للجزيئات الفردية، الذي بدوره يؤثر على حركة الاندفاع.
تعتبر جميع الجسيمات في الرسوم متحركة اندفاع الأطفال انفجر الكائن الأصلي. ولذلك، مويس يسمح لنا بالتحكم في حركة الجزيئات انفجر الفردية باستخدام خاصية أطفال
، الذي يقبل كائن كقيمة لها. يمكنك استخدام جميع خصائص ShapeSwirl
ما عدا x
و y
داخل الكائن الأطفال. هذا أمر منطقي لأن الجزيئات الفردية في الرسوم متحركة اندفاع تظهر في مواقف معينة، والسماح لنا بتغيير موضع الجسيمات الفردية عشوائياً سوف تغيير التكوين.
سيتم تعيين أية قيم الخاصية الأطفال الذي لا تحدده إلى القيمة الافتراضية المقدمة من الوحدة النمطية ShapeSwirl
. في المثال التالي، يتم نحن موحية 20 خطوط مختلفة من الرسوم المتحركة الاندفاع. هذه المرة، زاوية
تم تعيين الخاصية في الجزيئات الفردية بدلاً من الكائن الاندفاع
حيث أن الأسطر فقط الدوران حول مركز بهم بدلاً من الكائن بأكمله. وكما تعلمنا في الدروس السابقة، جميع الكائنات ShapeSwirl
تخفض من 1 إلى 0 بشكل افتراضي. وهذا سبب تغيير أطوال الخطوط من 40 إلى 0 في الرسوم المتحركة.
1 |
var burstA = new mojs.Burst({ |
2 |
count: 20, |
3 |
children: { |
4 |
shape: 'line', |
5 |
stroke: 'black', |
6 |
radius: 20, |
7 |
angle: { |
8 |
0: 180 |
9 |
}
|
10 |
}
|
11 |
});
|
وكما ذكرت سابقا، نحن يمكنك تحريك كافة الخصائص شابيسويرل
داخل الحركات الاندفاع. يمكن أن يكون كل طفل في الرسوم المتحركة مجموعة الخصائص الخاصة به. إلا إذا كان يتم توفير قيمة واحدة، فإنه سيطبق على جميع الجسيمات الطفل. إذا كانت القيم شريطة كصفيف، سيتم تطبيق تسلسلياً، الجسيمات واحد في وقت واحد.
هنا هو التعليمة البرمجية JavaScript لإنشاء خمس حركات الاندفاع مختلفة استخدام جميع المفاهيم التي تعلمناه حتى الآن.
1 |
var burstA = new mojs.Burst({ |
2 |
count: 20, |
3 |
angle: { |
4 |
0: 180 |
5 |
},
|
6 |
radius: { |
7 |
0: 100 |
8 |
},
|
9 |
children: { |
10 |
shape: "polygon", |
11 |
stroke: "black", |
12 |
radius: 20, |
13 |
angle: { |
14 |
0: 360 |
15 |
},
|
16 |
duration: 4000 |
17 |
}
|
18 |
});
|
19 |
|
20 |
var burstB = new mojs.Burst({ |
21 |
count: 20, |
22 |
angle: { |
23 |
0: 180 |
24 |
},
|
25 |
radius: { |
26 |
0: 100 |
27 |
},
|
28 |
children: { |
29 |
shape: "polygon", |
30 |
fill: ["yellow", "cyan", "orange"], |
31 |
stroke: "black", |
32 |
radius: 20, |
33 |
scale: { |
34 |
1: 2 |
35 |
},
|
36 |
duration: 2000 |
37 |
},
|
38 |
isShowEnd: false |
39 |
});
|
40 |
|
41 |
var burstC = new mojs.Burst({ |
42 |
count: 20, |
43 |
angle: { |
44 |
0: -180 |
45 |
},
|
46 |
radius: { |
47 |
0: 100 |
48 |
},
|
49 |
children: { |
50 |
shape: "circle", |
51 |
fill: ["red", "black", "blue"], |
52 |
radius: { |
53 |
10: "stagger(5, 1)" |
54 |
}
|
55 |
}
|
56 |
});
|
57 |
|
58 |
var burstD = new mojs.Burst({ |
59 |
count: 6, |
60 |
radius: { |
61 |
0: 100 |
62 |
},
|
63 |
children: { |
64 |
shape: "circle", |
65 |
fill: ["red", "yellow", "blue"], |
66 |
scale: { |
67 |
1: "rand(1, 10)" |
68 |
}
|
69 |
},
|
70 |
isShowEnd: false |
71 |
});
|
72 |
|
73 |
var burstE = new mojs.Burst({ |
74 |
count: 6, |
75 |
radius: { |
76 |
0: 100 |
77 |
},
|
78 |
children: { |
79 |
shape: "circle", |
80 |
fill: ["red", "yellow", "blue"], |
81 |
stroke: "black", |
82 |
scale: { |
83 |
1: "rand(1, 10)" |
84 |
}
|
85 |
}
|
86 |
}).then({ |
87 |
angle: { |
88 |
0: 360 |
89 |
},
|
90 |
radius: { |
91 |
100: 0 |
92 |
},
|
93 |
scale: { |
94 |
1: 0 |
95 |
}
|
96 |
});
|
في الرسوم المتحركة الاندفاع الأولى، التناوب زاوية
تطبيقها مباشرة على كائن انفجر
المجموعة بأكملها حول المركز الكائن الاندفاع. ومع ذلك ، فإن الزاوية
المطبق داخل ممتلكات الأطفال تدور كل المثلثات حول مراكزها الخاصة. كما أبطأنا أيضًا حركة الصور المتحركة عن طريق تغيير مدة الرسوم المتحركة لجميع الأطفال إلى 4000 مللي ثانية.
في رسم الاندفاع الثاني ، يتم أخذ لون كل المثلثات من الصفيف الذي تم تمريره إلى خاصية التعبئة
. لقد حددنا ثلاثة ألوان تعبئة فقط ، ولكن العدد الإجمالي للمثلثات هو 20. في مثل هذه الحالات ، يحافظ mojs على ركوب الدراجات من خلال عناصر الصفيف ويملأ المثلثات بنفس الألوان الثلاثة مرارًا وتكرارًا.
في الرسوم المتحركة الرابعة ، نستخدم سلاسل راند
، والتي تعلمنا عنها في البرنامج التعليمي السابق ، لاختيار قيمة مقياس عشوائية لجميع جزيئات الطفل. نحن أيضا تعيين قيمة الخاصية isShowEnd
إلى false
من أجل إخفاء الجسيمات في نهاية الرسوم المتحركة.
في الرسم المتحرك الخامس ، نستخدم الأسلوب then()
من البرنامج التعليمي لوحدة نمطية الشكل لتشغيل تسلسل رسوم متحركة آخر بعد انتهاء الجزء الأول.
افكار اخيرة
كان الهدف من هذه السلسلة هو التعرف على أساسيات مكتبة الرسوم المتحركة Mojs. ركز كل برنامج تعليمي على وحدة واحدة وكيف يمكنك استخدام الخصائص في تلك الوحدة لإنشاء الرسوم المتحركة الأساسية.
استخدم هذا البرنامج التعليمي الأخير المفاهيم من البرامج التعليمية السابقة لإنشاء رسوم متحركة أكثر تعقيدًا بعض الشيء. Mojs هي مكتبة رسوم متحركة قوية جدًا ، وتعتمد النتائج النهائية التي تحصل عليها على مدى الإبداع الذي يمكنك الحصول عليه مع جميع الخصائص ، لذا استمر في إجراء التجارب.
إذا كان هناك أي شيء ترغب في توضيحه في هذا البرنامج التعليمي ، فيرجى إبلاغي بذلك في التعليقات.