فراخونی پارامتر (ویژگی ها) کامپوزیشن و لایه های دیگه :
باز هم تکرار کنم برای قسمت فراخونی و کلا ساختار کدنویسی به این لینک مراجعه کنین (که به این پست مربوط میشه) و برای آشنایی با توابع ، به این لینک
یکی از مبحث های بسیار مهم برای هر کد نویسی ای ، فراخونی هست. حالا توی اینجا فراخونی لایه ها و کامپوزیشن هاست و فراخونی ساختار برنامه نویسی مثل تابع یا آرایه نیست
مثلا فرض کنین تو مثال پست بالا ، که کداش به این سبک عمل میکنه که هر وقت مقدار rotation همون لایه از 90 به بالا بره ، مقدار opacity تغییر میکنه ، حالا فرض کنید میخاید وقتی مقدار rotation یک لایه ی دیگه تغییر کنه ، میزان opacity لایه ی مورد نظر ما تغییر کنه . یا فرضا هر وقت لایه ی خاصی که توی یک کامپوزیشن خاص دیگه ای که وجود داره تغییر کنه ، مقدار لایه ی فعلی مون (که توی یه کامپوزیشن دیگه هست) تغییر کنه
برای این کار لازم دارین که فراخونی لایه ها و کامپوزیشن ها رو یاد بگیرین که آسون هم هست
اگه بخاین یه لایه ی دیگه بجز اون لایه ای که دارین روش کد نویسی میکنین رو فراخونی کنین ، باید کل ساختارش رو با اسم یا در صورتی که شماره داره و خواستیم ، با شماره یا روش های دیگه فراخونی کنیم و بین هر فراخونی علامت نقطه بزاریم
منظور از کل ساختار اینه که به ترتیب ، نام کامپوزیشن و بعد نام لایه و بعد نام افکت و بعد پارامتر یا ویژگی اون افکت فراخونی شه و بین فراخونی کامپوزیشن و لایه و افکت و پارامتر ، علامت نقطع بزاریم (یکی از نشانه های آرایه ، علامت نقطه هست)
البته گاهی اوقات میشه کل ساختارش هم نام نبریم (مثلا اگه ویژگی rotation رو نام میبریم ، لازم نیست اسم افکت اش که transform هست را نام ببریم اما احتمالا وقتی افکت ای که خودمون اضافه میکنیم ، باید اسم اش رو ببریم پس بهتره عادت به کامل نوشتن کنیم)
ضمنا همونطور که قبلا گفته شد ، نام افکت ها و یا ویژگی ها رو حتما باید با حروف کوچیک نوشت
برای فراخونی کامپوزیشن ، کلمه ی comp (با حروف کوچیک) رو مینویسیم و بعد از گزاشتن پرانتز (پس تابع هست) ، نام کامپوزیشن (حتما باید عین اسم خود کامپوزیشن با رعایت تمام حروف های بزرگ و کوچیک بنویسیم) رو بین علامت رشته که دو تا علامت " " هست مینویسیم
دقت داشته باشین که نام یه چیزی (مثل نام کامپوزیشن یا نام لایه و ...) که به عنوان رشته توی دو تا علامت " " فراخونی میشه ، باید عین نام اصلی با رعایت حروف کوچیک و بزرگ باشه اما نام تابع (در اینجا کلمه ی comp یا در جلوتر کلمه های rotation و ... که میرسیم) باید کلا با حروف کوچیک باشن
فرض کنید نام کامپوزیشن من هست Copm 1 (با C بزرگ و یه فاصله داره تا 1) پس تا اینجا میشه :
اولین comp با c کوچیک که نام تابع ام هست و Comp 1 که دقیق باید همینطور نوشته بشه بین دو علامت " " به عنوان رشته ، اسم کامپوزیشن ام هست
بعد از این نوبت میرسه به فراخونی نام لایه منتها قبل اش باید از علامت نقطه بین شون استفاده کرد (یعنی آرایه) چون نوع فراخونی ما عوض داره میشه و از نوع کامپوزیشن به نوع لایه داریم میرسیم. لایه هم دقیق مثل فراخونی کامپوزیشن هه فقط فرقش اینه که بجای کلمه ی comp از کلمه ی layer (با حروف کوچیک) استفاده میشه . فرض کنید اسم لایه ی من tasvir tabiat.jpg هست (دقت کنین وقتی عکس یا هر چیزی میزارین تو پروژه ، بصورت اتوماتیک پسوند فایل هم به عنوان اسم اش انتخاب میشه که میتونین بصورت دستی اونو تغییر نام بدین و پسوند فایل رو از اسم لایه توی پروژه حذف کنین) و به عنوان دومین لایه ی من هست
پس تا اینجا میشه :
کد:
comp("Comp 1").layer("tasvir tabiat.jpg")
تذکر : همونطور که میدونیم ، هر لایه ، شماره ای داره و ما میتونیم برا فراخونی ، بجای اینکه اسم لایه رو به عنوان رشته توی " " بنویسیم ، بدون استفاده از این علامت (شماره هایی رو که به عنوان عدد هستند ، توی رشته نمیزارن) شماره ی لایه رو بنویسیم که این روش راحت تره و پیشنهاد میشه. فقط همونطور که گفته شد باید دقت کنیم چون عدد لایه ، اسم نیست پس نباید توی علامت رشته " " که نام رشته رو مشخص میکرد بزاریم
چون فرض کردیم این لایه tasvir tabiat.jpg ، دومین لایه ی من هست پس میتونیم بجای خط بالا بنویسیم :
کد:
comp("Comp 1").layer(2)
باز هم تاکید میشه که دقت کنین ، شماره ی لایه ، توی علامت رشته "" قرار نگرفت
بعد هم نقطه میزاریم و بعد اسم یا همون نوع افکت مورد نظرمون که transform بود (چون اسم افکت به عنوان تابع هست پس نباید توی علامت رشته که "" هست قرار بگیره و باید هم تمام حروف هاش کوچیک باشن حتی اگه اسم اش توی افترافکت با حرف اول بزرگ نوشته شده باشه). پس :
کد:
comp("Comp 1").layer(2).transform
هر چند نام افکت در اینجا مهم نیست اما پیشنهاد اینه که بهتره کامل بنویسیم تا عادت کنیم
باز هم نقطه و بعد نام ویژگی یا همون پارامتر مورد نظر رو مینویسیم (باز هم چون تابع هست با حروف کوچیک) . چون همون مثال پست بالا رو میخایم کار کنیم ، و مثال ما هم rotation بود پس میشه :
کد:
comp("Comp 1").layer(2).transform.rotation
این از آرگومان اول اش بود . بقیه ی آرگومان مثال پست بالا که بود :
کد:
linear(comp("Comp 1").layer(2).transform.rotation ,90,180,100,30)
اگه این کد رو توی ویژگی opacity لایه ی اول (فرض میکنیم اونم تصویر یا هر چیز دیگه ای هست) بزاریم و لایه ی دوم هم که مشخص بود که تصویره وقتی تصویر در لایه ی دوم داخل کامپوزیشن Copm 1 رو از 90 درجه بیشتر بچرخونیم ، شفافیت لایه ی اول آروم آروم کم میشه (تا 30 درصد میرسه اگه چرخش لایه ی دوم به 180 درجه برسه)
همونطور که توی لینک توابع که داده شد مشخص هه ، اگه کامپوزیشن ای که فراخونی میکنیم ، توی همون کامپوزیشن ای هست که داریم کد نویسی میکنیم ، میشه بجای قسمت فراخونی کامپوزیشن (که شامل نام اش هم میشد) از تابع با کلمه ی this_comp (قسمت comp با C کوچیک و آندرلاین بین شون) و یا بجای این هم از کلمه ی thisComp (بدون آندرلاین و حتما با C بزرگ برای کلمه ی Comp اما کلمه ی this با t کوچیک) میشه استفاده کرد که دیگه از نوشتن نام کامپوزیشن خلاص شیم.
این مثال بالا هم این طوری در نظر گرفته شده که هر دو لایه توی یه کامپوزیشن ان پس میشه بجای خط بالا هم نوشت :
کد:
linear(thisComp.layer(2).transform.rotation ,90,180,100,30)
یا
کد:
linear(this_comp.layer(2).transform.rotation ,90,180,100,30)
برای لایه هم این کلمه ی کلیدی صادق هست اما چندان کاربرد نداره یعنی this_layer یا thisLayer
فراخونی ویژگی ها و پارامترهایی که چند مقدار دارند (مهم) :
فرض کنید میخاین یه ویژگی و پارامتری رو که 2 تا مقدار داره مثل position که هم مقداری برای x و هم مقداری برای y داره رو فراخونی کنین. یا اگه لایه ای رو 3 بعدی کنین ، تعداد position به 3 تا هم میرسه . در این صورت چی؟
برای قسمت هایی که بیش از یکی هستند (حالا میخاد یه بار به عنوان x و y و z باشن یا هر چیز دیگه ای) هر کدوم شون به ترتیب داخل آرایه ی خاص میرن که این آرایه ها از صفر شروع میشه (مثل زبان ++C از صفر شروع میشن این آرایه ها) . علامت آرایه هم کلوشه هست [ ] و شماره ی مورد نظر رو توش باید بنویسیم. چون position 3 مقدار داره (در صورت 3 بعدی بودن یا 2 مقدار در صورت 2 بعدی بودن) پس جلوی اسمش علامت کلوشه باز میکنیم . چون شماره گزاری این آرایه ها از صفر شروع میشد ، اگه منظور ما x بود ، شماره ی 0 و اگه y بود شماره ی 1 و اگه z بود شماره ی 2 رو توی کلوشه مینویسیم. پس [0]position یعنی مقدار x منظورمون هست و [1]position یعنی مقدار y منظورمون هست و [2]position یعنی مقدار z منظورمون هست (حواسمون به شماره گزاری آرایه ها باشه که از 1 شروع نمیشه ها)
پس اگه خاستیم مثلا بگیم تو لایه ی دوم هر وقت بازه ی x (منظور همون position) از 500 تا 800 تغییر کرد ، شفافیت لایه ی اول هم از 100 به 20 تغییر کنه ، مینویسیم :
کد:
linear(thisComp.layer(2).transform.position[0] ,500,800,100,20)
حالا اگه position لایه ی دوم رو بین بازه ی 500 تا 800 تغییر بدیم ، لایه ی اولی شفافیت اش به همون نسبت تغییر میکنه
اگه کدی رو اشتباه بنویسیم ، بعد از نوشتن ، علامت اخطار زرد رنگ سمت چپ اش ظاهر میشه که با زدن اش توضیح رفع خطا توش هست
این دیگه بدیهی هست که وقتی کد بالا رو نوشتیم ، میخاین تو خروجی فیلم کار کنه ، اول باید برای position محور x لایه ی دوم ، کی فریم ای درست کنیم که مثدارش بین 500 تا 800 تغییر کنه و بعد نتیجه رو ببینیم توی شفافیت لایه ی اول
یه تذکر دیگه عمومی تو برنامه نویسی بگم که بعد از تموم شدن تابع (مثلا بسته شدن پرانتز تابع linear) اگه بخایم تابع یا کد دیگه ای بنویسیم باید آخر تابع قبلی علامت ; بزاریم
به این توابعی که هم تابع ان و هم داخل آرایه هستن (علامت دات یا کلوشه دارن) ماژول گفته میشه
در آرگومان های 2 تا پنجم linear میشهبجای عدد ، متغییر یا آرایه یا تابعی که مقدار بازگشتی شون عدد باشه ، استفاده کرد
برای درک بیشتر این نکات 3 خط آخر ، بهتره آموزش لوا که تو انجمن هست رو بخونین