سلام
این آموزش متنی هست
بعد اینکه سطح آموزشش مبتدی و برای پارسال هست که یه کمی افترافکت کار میکردم و گفتم آموزشش هاشو (ولو مبتدی) بزارم شاید به درد یکی بخوره. این آموزش ها خیلی وقت هه آپدیت نشد چون خیلی وقته افترافکت (و نرم افزار های میکس و مونتاژ) کار نمیکنم :



اول از همه نکته ی بسیار مهمی رو بگم اونم لینک توابع و مثال ها ی کدنویسی افترافکت رو از اینجا و لینک توضیح نوع دستورات برنامه نویسی رو در اینجا میتونین تو آدوب ببینین (زبان اش هم جاواست. باید با قند شکن لینک ها (سایت آدوب) رو باز کنین)

هر از گاهی اگه توابع و کد نویسی افترافکت (که به زبان جاوا هست) رو یاد گرفتم ، اینجا میزارم

کسایی که کلا با ساختار کدنویسی و برنامه نویسی آشنا نیستن ، بهتره با یکی از زبان ها کار کنن
تا جایی که من یه کم زبان ها رو میدونم ، جاوا و لوا خیلی شباهت دارن به هم. به کدنویسی در افترافکت ، Expression میگن
همونطور که میدونین و در فیلم گفته شد ، برای شروع کدنویسی در افترافکت ، کلید Alt رو پایین نگه میدارین و بعد بر روی آیکون ساعت (همون علامت کی فریم) کنار یکی از پارامترها یا ویژگی ها (منظورم از پارامتر یا ویژگی ، هر چیزی که مقدار عددی داره و علامت آیکون ساعت داره مثل rotation و opacity و هر چیز دیگه ای ...) کلیک میکنین
بازم همونطور که میدونین در برنامه نویسی هر جا از علامت پرانتز استفاده شد ، اون چیز ، تابع هست که میتونین برای آشنایی با ساختار تابع ها با برنامه نویسی آشنا شین . و اینکه هر تابع ، پارامتر یا آرگومانی رو به عنوان ورودی داره


تابع linear :

یکی از توابع پرکاربرد تو افترافکت هه . کار این تابع اینه که در یک رویداد (منظورم از رویداد، هر چیزی که مقدار عددی داره و علامت آیکون ساعت داره مثل time (که زمان در حال سپری شدن هست) یا rotation (مثلا مقدار عددی میشه به این داد و گفت 45 درجه بچرخ) یا opacity و هر چیز دیگه ای ...) ، یک کاری رو انجام بده . در واقع اگه تعریف کامل ترش رو بخاین اینه که در بازه ای از یک رویداد یا پارامتر (چون همونطور که گفتم ، پارامتر یا رویداد باید از نوع عددی باشه مقدارش پس یه بازه میشه براش تعریف کرد . مثلا فرض کنید زمانی که بازه ی مقدار پارامتر rotation از 90 درجه تا 180 درجه تغییر کرد ) ، اون پارامتر یا رویدادی که توش هستیم و توش داریم کد مینویسیم (یعنی با نگه داشتن دکمه ی alt و کلیک روی آیکون زمان یا کی فریم اش شروع کردیم به کد نوشتن) مقدارش از یه چیزی به چیز دیگه تغییر کنه (چون توی رویدادی میتونیم کد بنویسیم که مقدار عددی باشه)
به مثال شفاهی اینه که مثلا وقتی مقدار پارامتر rotation از 90 به 180 درجه تغییر کرد (یعنی هر وقت مقدار rotation از 90 شروع شد . نه اینکه قبل از 90) ، در این بازه مقدار opacity اش از 100 تا 30 تغییر کنه

آرگومان های تابع :
این تابع دارای 5 تا آرگومان داره
1) اولین آرگومان، نام رویدادی هست که میخایم هر وقت تغییر کرد ، عمل خاصی اتفاق بیفته (در مثال بالا ، همون rotation هست). فقط دقت کنیم که نام رویداد رو با حروف کوچیک بنویسیم چون اغلب زبان های برنامه نویسی از جمله جاوا به این حروف حساس اند (حالا این مهم نیست که تو افترافکت همون رویدادها اول حرف شون با حرف بزرگ نوشته میشه)
2) توی دومین آرگومان ، حداقل مقدار آرگومان اول رو میدیم (یا همون مقدار اولیه ی آرگومان اول رو میدیم که در مثال بالا همون 90 هست) . یعنی هر وقت مقدار rotation از 90 شروع شد
3) توی سومین آرگومان ، حداکثر مقدار آرگومان اول رو میدیم (یا همون مقدار آخریه ی آرگومان اول رو میدیم که در مثال بالا همون 180 هست) . یعنی هر وقت مقدار rotation تا 180 ختم شد
4) توی چهارمین آرگومان ، حداقل مقدار یا در واقع همون مقدار اولیه ی پارامتر یا رویدادی رو میدیم که توش کد داریم مینویسیم (که اون رویداد عملی میشه) . در مثال بالا ، این کد رو باید توی رویداد opacity بنویسیم و مقدارش همون 100 هست (یعنی مقدارش از 100 تغییر میکنه)
5) توی آرگومان آخر هم ، حداکثر مقدار یا در واقع همون مقدار آخریه ی پارامتر یا رویدادی رو میدیم که توش کد داریم مینویسیم (که اون رویداد عملی میشه) . در مثال بالا ، این کد رو باید توی رویداد opacity بنویسیم و مقدارش همون 30 هست (یعنی مقدارش تا 30 ختم میشه)

عملی که در نهایت انجام میشه ، رویدادی هست که اون کد رو توش داریم مینویسیم و مقدار این رویداد هم توی دو آرگومان آخر یعنی آرگومان های 4 ام و 5 ام مشخص میشه . پس این دو آرگومان ، به عنوان خروجی این تابع هستند و چون مقدارشون در حال تغییر بین این دو مقدار هست پس مقدار ثابتی در زمان خاص ندارن
و همینطور میدونیم در هر زبونی بین آرگومان های توابع باید ویرگول گزاشت که از هم جدا شن و اول و آخر اون تابع رو پرانتز گزاشت به عنوان علامت تابع

پس با این حال اگه بخایم همون مثال rotation ای رو که در بالا گفته شد رو عملی بنویسیم :
اول چون میخایم مقدار opacity مون عوض شه ، پس این کد رو توی پارامتر opacity مینویسیم. دوم اینکه میخایم پارامتر rotation هر وقت تغییر کرد ، این عمل انجام شه ، پس آرگومان اول رو rotation مینویسیم (با حروف کوچیک). چون میخایم هر وقت مقدار rotation از 90 به 180 تغییر کرد ، مقدار opacity هم از 100 کم شه و تا 30 تغییر کنه ، به ترتیب توی پارامترهای دوم تا پنجم ، عددهای 90 و 180 و 100 و 30 رو مینویسیم :

کد:
linear(rotation,90,180,100,30)

حالا کافیه که مقدار rotation رو از 90 آروم آروم بیشتر کنین و تا 180 برسونین ، میبینین که opacity اش هم داره کم میشه آروم آروم
تذکر : وقتی توی رویدادی (در اینجا opacity) کدی نوشتیم ، دیگه نمیشه مقدار این رویداد رو تغییر داد چون تابع کد ما میشه پس در اینجا دیگه نمیشه میزان شفافیت رو خودمون هر وقت دلمون خلست برای این لایه دستکاری کنیم
این مشخصه که اگه هر وقت رویدادی که تو آرگومان اول فراخونی کردیم ، برعکس شه مقدارش ، مقدار عمل انجام شده هم بر عکس میشه و به مقدار اولیه ی خودش برمیگرده یعنی در مثال بالا اگه rotation رو که از 180 گذشته شد رو هر وقت کمتر از 180 کنیم دوباره ، مقدار opacity هم بر عمس میشه و اگه rotation به 90 برسه opacity هم به 100 میرسه آروم آروم

یه مثال دیگه اینکه هر وقت زمان از 5 امین ثانیه به 8 امین ثانیه رسید ، opacity از 0 به 100 برسه :
برای این کار چون پارامتر زمان دیدنی نیست ، هر جا خاستیم از زمان استفاده کنیم ، از کلمه ی time استفاده میکنیم

کد:
linear(time,5,8,0,100)

حالا کافیه که زمان رو از 5 ثانیه تا 8 امین ثانیه ببرین ، میبینین که opacity اش هم داره بیشتر میشه آروم آروم
در کل کار این تابع خیلی شبیه عملکرد if تو زبان برنامه نویسی هه (یعنی اگه شرط خاصی برقرار بود ، عمل خاصی رو انجام بده منتها این یه رنج خاص داره که دیدیم) . هر چند توی زبان جاوا هم ساختار if خودش هست (خواستم بگم عملکرد این تابع بیشتر به چی شبیه هه)