آرایه ها :
خلاصه اینکه توی افترافکت (جاوا اسکریپت) اگه میخاین به ویژگی ای (مثلا Rotation و یا هر ویژگی دیگه ای که کلا قابلیت ساخت کی فریم رو داشته باشه) مقدار بدین ، باید از آرایه ها استفاده کنین. البته اگه پارامتری ویژگی ای فقط یک مقدار بخاد (مثلا مثل ویژگی Opacity که فقط یک مقدار میخاد ، میتونین از متغییرها هم استفاده کنین . یعنی در این حالت هم میشه از آرایه ها استفاده کرد و یا هم از متغییرها اما برای ویژگی هایی که بیشتر از یک مقدار دارن ، باید از آرایه ها استفاده کرد مثل ویژگی Rotation یا Position که هم پارامتری برا X و هم Y و اگه 3 بعدی هم باشه برای Z داره)
اینکه برای آرایه ها یا متغییرها ، اسم بزاریم با نزاریم ، هیچ فرقی تو نتیجه نداره.
نکته ی مهم دیگه اینکه اگه تو ویژگی ای (مثلا Rotation) ، متغییر یا آرایه ای تعریف کردیم ، نام این آرایه یا متغییر ، توی حوزه ی ویژگی دیگه (مثلا در حوزه ی Position) قابل شناسایی و تعریف شده نیست و نمیشه اون متغییر یا آرایه رو اونجا فراخونی کرد (البته تا جایی که من تست کردم . خبر بدی هم هست و اگه کسی روش حل کردن یا فراخونی متغییر توی ویژگی های دیگه رو متوجه شد ، ممنون میشم بگه)
آرایه رو توی علامت [ ] توی جاوا اسکریپت یا همون زبون برنامه نویسی افترافکت میزارن (توی لوا و ++C توی علامت { } میزارن) . عضوهای هر آرایه ، با علامت ویرگول از هم جدا میشن
حالا یه چن تا مثال :
توی ویژگی Opacity بنویسین :
همین ، تموم . این باعث میشه مقدار Opacity شی تون 30 درصد بشه
چون توی علامت [ ] هست ، یعنی آرایه هست. چون عدد دیگه ای با ویرگول ازش جدا نشد ، پس یعنی یک مقدار داره پس میشه بجای اینکه آرایه بنویسیم ، توی متغییر بنویسیم
این خط بالا ، هیچ فرقی نداره که برای آرایه یا متغییر ، اسمی بزاریم مثلا :
این دقیق همون کار رو میکنه که خط بالاترش میکرد ، فقط مقدار آرایه رو توی Array ذخیره میکنه
همونطور که میدونین ، توی اغلب برنامه نویسی ها ، مثل ++C و جاوا اسکریپت ، اندیس یا شماره ی آرایه ها از صفر شروع میشه تا تعداد مقدارشون منهای یک . یعنی برای فراخونی آرایه ها که در اون موقع باید از اندیس استفاده کنیم ، از صفر باید شماره گزاری بشن تا تعداد آرایه ها منهای یک (لوا از صفر نیست ، دلتون آب
)
تیک 3 بعدی یک لایه رو بزنین و توی ویژگی Position اش این رو بنویسین :
همونطور که مشخصه ، آرایه ی Pos ، سه مقدار داره که به ترتیب مقدار اول اش که برای X بود ، 700 و مقدار دومش که برای Y بود ، 300 و مقدار سومش که برای Z بود ، 100 هست. برای فراخونی آرایه با 3 عضو همونطور که گفته شد ، عضو اول رو که 700 هست بخایم فراخونی کنیم ، درسته که اولین عضو هه اما زبان اونو به عنوان صفر امین عضو میشناسه پس برای فراخونی عضو اول که مقدار 700 برای پارامتر X هست ، باید بنویسیم :
حالا صفرامین عضوش که مقدار اولی که 700 بود ، هست ؛ اولین عضوش میشه مقدار دومی که 300 که برای پارامتر Y و همینطور دومین عضوش هم مقدار سومی که 100 که برای Z هست میشه
پس عضو های آرایه ها کلا از صفر شروع میشه تا همینطور میریم بالا :
کد:
Pos[0];
Pos[1];
Pos[2];
متغییر و آرایه ی value :
اول بگم value با همه ی حروف کوچیک هستا (چون زبان ها به حروف کوچیک و بزرگ حساس ان)
متغییر یا آرایه ی میشه گفت رزرو شده هست که مقدار همون ویژگی ای که توش فراخونی شد رو برمیگردونه. مثلا اگه توی ویژگی Opacity فراخونده بشه و نوشته بشه ، همون مقداری که Opacity داشت رو برمیگردونه (فرضا مقدار Opacity بود 50 درصد ، متغییر value مقدارش 50 درصد میشه) و اگه توی ویژگی Rotation نوشته شه ، همون مقادیر های این ویژگی رو برمیگردونه (البته در قسمت Rotation چون چند پارامتر داره در ادامه توضیح داده میشه)
کلمه ی value هم میتونه متغییر باشه و هم آرایه . در جاهایی که اون ویژگی ، یک پارامتر داره (مثل Opacity) به عنوان متغییر هست و در جاهایی که بیش از مقدار باشه (مثل Rotation و ...) ، به عنوان آرایه هست که باید در این صورت با اندیس فراخونی شه (در اینجا اشتباه گرفتن value به عنوان متغییر یا پارامتر (یعنی اینکه بدون اندیس فراخونی کنیم یا با اندیس) موجب ارور میشه ها . حواسمون باشه) یعنی در این صورت ، در Rotation ، برای فراخونی پارامتر X اش value[0] و برای Y اش value[1] و برای Z اش value[2] رو مینویسیم
مطمئن شین تیک 3 بعدی یه لایه زده هه . توی ویژگی Position مقادیرشو به ترتیب X و Y و Z رو بدین 700 و 300 و 100 و بعدش این کد رو بدین :
کد:
[value[0],value[1],value[2]];
همونطور که میبینین ، هیچ تغییری با دادن کد وضعیت Position هاش نکرد چون مقدار اولی که value[0] که برای X و 700 بود رو برای عدل برای خود X میزاره و همینطور مقدار Y و Z رو که 300 و 100 بودن رو برای خودشون میزاره (چون همون ها بودن ، هیچ تفاوتی نکردن وضعیت شون)
در ادامه برای درک بیشتر مثال های بیشتری زده میشه اما قبل اش عملیات ریاضی روی آرایه ها رو بگم
عملیات ریاضی روی آرایه ها :
اگه هر عضو با مقداری ، عمل ریاضی روش بصورت مجزا انجام شه که هیچ . مثل این که مشخصه :
کد:
[value[0]+100,value[1]+200,value[2]+300];
اما اگه عملیات ریاضی ، قبل یا بعد از آرایه انجام بشه ، در همه ی حالات اون عدد یا عددهای قبل یا بعد از آرایه ، فقط با صفرامین عضو از آرایه عملیات انجام میده بجز زمانی که کل یه آرایه (نه فقط عضو خاصی از آرایه که همون در حقیقت یک عدد میشه) رو با آرایه ی دیگه عملیات ریاضی انجام بدیم.
همونطور که تو خط های بالا گفته شد ، پارامترهای X=700 و Y=300 و Z=100 تنظیم کردیم ؛ پس :
کد:
500+[value[0],value[1],value[2]];
عدد 500 رو با صفرامین عضو که value[0] که همون مقدار X که 700 بود رو جمع میکنه و میزاره بجای value[0] یا همون صفرامین عضو آرایه . پس مقدار X بجای 700 ، میشه 1200
کد:
value[1]+[value[0],value[1],value[2]];
مقدار عدد قبل از آرایه رو که value[1] که 300 هست را با صفرامین عضو از آرایه که 700 هست جمع میکنه و توی صفر امین عضو از آرایه که همون مقدار X بود ، جایگزین میکنه که میشه 1000
اما اگه کل یه آرایه (بدون مشخص کردن عضو خاصی از اون) رو با یه آرایه ی دیگه جمع کنیم (منظورم اینه که کلا عملیات ریاضی روشون انجام بدیم) ، صفر امین عضو از آرایه ی اول رو با صفر امین عضو از دومین آرایه جمع میکنه و مقدارش رو توی صفرامین عضو آرایه میزاره و اولین عضو از هر دو آرایه رو جمع میکنه و توی اولین عضو از آرایه میزاره و همینطور تا آخر ...
پس :
کد:
value+[value[0],value[1],value[2]];
همونطور که گفته شد ، قبل از آرایه (علامت براکت) که value اومد و چون value توی Position اومد ، و Position هم 3 تا پارامتر داره (بیش از یکی) پس value آرایه هست (متغییر نیست) که 3 مقدار داره . خودش باز با آرایه ای که 3 مقدار جداگانه داره که این هست :
کد:
[value[0],value[1],value[2]]
جمع شد . پس چون دو تا آرایه جمع شدن ، صفر امین عضو از هر دو آرایه با هم جمع میشن و در مقدار آرایه ی نهایی ذخیره میشن و همینطور مقدار اولین و دومین عضو از آرایه هم همینطور . پس همه ی عضو ها چون با مقدار خودشون جمع میشن ، در اینجا در واقع هر عضو ضربدر 2 میشه . پس مقدار X میشه 1400 و Y=600 و Z=200 میشه
یه مثال دیگه اینکه داخل همین Position ، این کد رو بنویسین :
کد:
temp = transform.opacity;
temp =temp *7;
[temp, temp, temp]
در واقع کد بالا ، مقدار opacity رو میگیره هر وقت تغییر کنه و توی متغییر temp میریزه (چون Opacity یه دونه پارامتر فقط داره ، پس temp متغییر میشه نه آرایه) تو خط دوم متغییر temp هفت برابر میشه و این متغییر توی هر 3 پارامتر X و Y و Z به عنوان Position جایگزین میشه . مثلا اگه مقدار Opacity رو 50 کنیم (یا اگه برای Opacity کی فریم درست کنیم هم که برای Position هم کی فریم درست میشه) position برای X و Y و Z هر 3 تاشون 350 میشن
اگه توی Position فقط یک مقدار رو خواستیم که برابر متغییر temp بشه (مثلا مقدار Y رو این طور خواستیم) و بقیه X و Z همون مقداری که هستن بمونن ، مشخصه که میتونیم بجای X و Z یعنی بجای صفرمین و دومین (اولین و آخرین) عضو آرایه ، آرایه ی valu[0] و value[2] رو بکار ببریم که باعث میشه صفرمین عضو از آرایه که X و برابر 700 بود ، همون بمونه و همینطور دومین (آخرین) عضو آرایه که 100 بود هم همین مقدارش بمونه و فقط مقدار temp (که 300 بود) جایگزین Y میشه :
کد:
temp = transform.opacity;
temp =temp *7;
[value[0], temp, value[2]]
این گفته شد که در خط آخر کد بالا اگه بجای valu[0] یا value[2] فقط value بزاریم ، چون آرایه هست (و بسته ای از اعداد رو فراخونی کردیم و عدد مشخصی رو فراخونی نکردیم) ، ارور میگیریم
بوک مارک ها