باز هم مکس اسکریپت max script

پرواز

Member
سلام به همه دوستان الالخصوص اونهایی که عاشق مکس اسکریپت هستند باز هم مثل همیشه وقتی تو مجید انلاین پیدام میشه که تو مکس اسکریپت گیر کرده باشم
البته دیگه دوستان فهمیدن که سئوالات من خیلی ابتدایی هستند چون خودم اماتور هستم
اما سئوال
ابجک در حالت انتخاب و اسلایدر تایم من روی یک فریم که دارای یه کلید است ایستاده حالا دقیقا میخوام مقدار rotation اون کلید رو بدست بیارم ..همین
مثلا $.rotation بزای اون نقطه

البته کارهای دیگه ای هم باس بعدش روش انجام بدم ولی فعلا گیر کار اینجاست
مثلا اگه ابجکت دارای پدر (پرنت) است باید rotation پدر ازش کم بشد تا مقدار واقعی بدست بیاد:rose::rose::rose::rose:
 

Elton John

Member
ابجک در حالت انتخاب و اسلایدر تایم من روی یک فریم که دارای یه کلید است ایستاده حالا دقیقا میخوام مقدار rotation اون کلید رو بدست بیارم ..همین
مثلا $.rotation بزای اون نقطه


کد:
quatToEuler (inverse (at time 20 (  $box001.rotation ) ))
 

پرواز

Member
باز هم تشکر
مثل همیشه شما
بهتون حسودیم میشه young animator
پیغامتون هم رو تازه خوندم نمی دونم فکر کنم ماهها پیش فرستاده بودی ولی اگه کاری از عهدم بر بیاد حاظرم کمک کنم
یک سال دارم با اسکریپت ور میرم ولی همش تو ساده ترین موضوعات میمونم
فقط یه سئوال کوچولوی دیگه
میخوام بدون اینکه شئی مورد نظرم رو انتخاب کنم فریم کلید قبلی نسبت به currenttime رو بدست بیارم البته در اینجا scale

مثل
trackbar.getNextKeyTime()
trackbar.getPreviousKeyTime()
 
آخرین ویرایش:

پرواز

Member
کد:
quatToEuler (inverse (at time 20 (  $box001.rotation ) ))
نتونستم ازش استفاده کنم
یعنی بلد نبودم این فرمان رو بکار ببرم
لپ مطلب اینه که من میخواهم میزان چرخش یک ابجکت رو مثلا در محور x بدست بیارم و اونو جایی دیگه و روی شئی دیگه اعمال کنم
بیزحمت طرز استفاد فرمانو بهم بگو
چجوری خروجی بگیرم و چطور عمالش کنم :rose::rose::rose:
 

Elton John

Member
نتونستم ازش استفاده کنم
یعنی بلد نبودم این فرمان رو بکار ببرم
لپ مطلب اینه که من میخواهم میزان چرخش یک ابجکت رو مثلا در محور x بدست بیارم و اونو جایی دیگه و روی شئی دیگه اعمال کنم
بیزحمت طرز استفاد فرمانو بهم بگو
چجوری خروجی بگیرم و چطور عمالش کنم :rose::rose::rose:

بجای عدد 20 فریمتو قرار میدی و جای باکس اسم موضوع رو قرار بدید

کد:
my_rot_at_time  =  quatToEuler (inverse (at time 20 (  $box001.rotation ) ))
    
        (eulerAngles 34.9885 0.21417 -87.457)
    
myrot_x  =  my_rot_at_time.x
    
          34.9885
 

Elton John

Member
باز هم تشکر
مثل همیشه شما
بهتون حسودیم میشه young animator
پیغامتون هم رو تازه خوندم نمی دونم فکر کنم ماهها پیش فرستاده بودی ولی اگه کاری از عهدم بر بیاد حاظرم کمک کنم
یک سال دارم با اسکریپت ور میرم ولی همش تو ساده ترین موضوعات میمونم
فقط یه سئوال کوچولوی دیگه
میخوام بدون اینکه شئی مورد نظرم رو انتخاب کنم فریم کلید قبلی نسبت به currenttime رو بدست بیارم البته در اینجا scale

مثل
trackbar.getNextKeyTime()
trackbar.getPreviousKeyTime()


چرا حسودی؟؟ :?::there::green:

و جواب سوالت دومت::

کد:
sp_array_keys = #()

my_ct = currenttime

for i = 1 to (numKeys  $box001.scale.controller) do 
(
    gotoarray  = getkeytime  $box001.scale.controller  i
    append sp_array_keys gotoarray
)

count_arr = sp_array_keys.count

try
(

 ooo=for me = 1 to  count_arr do 
(
test = sp_array_keys[me]
    
if (test>my_ct  or test==my_ct) do  (  msg = (sp_array_keys[me-1]) ; messagebox (msg as string) ; exit)  
    
)


if ooo == ok do (  msg = (sp_array_keys[count_arr]) ; messagebox (msg as string)  )

)--try

catch (messagebox "no key or keys")
میدونم سوال در این اسکریپت زیاده
مشکلی نیست سوالتونو کمکم مطرح کنید هر وقت کردم پاسخ میدم



موفق باشید
 
آخرین ویرایش:

پرواز

Member
ممنون :rose::rose::rose:
حالا که شما گاه وقتی سری به مجید انلاین میزنی منم از فرصت استفاده میکنم و مطلب ازت میگیرم :)
تو فرمان بالا از دستور
tray
case
استفاده کردی کاربردش چیه.البته نه دز اسکریپت بالا .کلی برای چه مواقعی استفاده میشن
تو هلپ هم دنبالش رفتم ولی خوب خدایی هلت اسکریپت مکس راحت نیست و من زبانم تعریفی نداره:-?
 

Elton John

Member
ممنون :rose::rose::rose:
حالا که شما گاه وقتی سری به مجید انلاین میزنی منم از فرصت استفاده میکنم و مطلب ازت میگیرم :)
تو فرمان بالا از دستور
tray
case
استفاده کردی کاربردش چیه.البته نه دز اسکریپت بالا .کلی برای چه مواقعی استفاده میشن
تو هلپ هم دنبالش رفتم ولی خوب خدایی هلت اسکریپت مکس راحت نیست و من زبانم تعریفی نداره:-?


try --در واقع خطا های قرمز رنگی که در listener میبینی میگیره
catch-- بعد از گرفت این خطا ها توسط try میتونید علت خطا رو توضیح دهید و یا یک عبارت رو به اجرا در بیارید

برای تست تایم اسلایدر رو ببرید قبل از همه کلید ها مثلا فریم 20f- و try و catch رو پاک کنید ، اسکریپت رو اجرا کنید خطا ها رو مبینید
 
آخرین ویرایش:

پرواز

Member
ممنون
عالی جواب داد
سعی میکنم بعضی اسکریپتها رو تحلیل کنم تا بیشتر یاد بگیرم
در مورد اسکریت شما
sp_array_keys = #()
چه نو متغیریه#()
فرمان apend کارش اینجا وارد کردن عدد بدست اومده به داخل متغییر است ؟؟ کار کلیش چیه
و

if ooo == ok do ( msg = (sp_array_keys[count_arr]) ; messagebox (msg as string) )

خط مشابه بالاییش کارش کرفتن فریم مورد نظر بود
این خط چیکار باید انجام بده و ok از کجا قراره بدست بیاد

اینطوری که فهمیدم خروجیش تعداد کل کلیدهای مورد نظر توی کل تایم لاینه طبقه این خط
count_arr = sp_array_keys.count
چه پیغامی رو و کی باید بفرسته

:rose::rose::rose:
 

Elton John

Member
لطفا کد ها رو در داخل code که بالای ادیتور به شکل یک نامریک یعنی # قرار دهید

چون اینجوری کدها همش چپ به راست و راست به چپ میشن و قاطی میکنند
===================================================================
 

Elton John

Member
ممنون
عالی جواب داد
سعی میکنم بعضی اسکریپتها رو تحلیل کنم تا بیشتر یاد بگیرم
در مورد اسکریت شما
sp_array_keys = #()
چه نو متغیریه#()
فرمان apend کارش اینجا وارد کردن عدد بدست اومده به داخل متغییر است ؟؟ کار کلیش چیه
و

if ooo == ok do ( msg = (sp_array_keys[count_arr]) ; messagebox (msg as string) )

خط مشابه بالاییش کارش کرفتن فریم مورد نظر بود
این خط چیکار باید انجام بده و ok از کجا قراره بدست بیاد

اینطوری که فهمیدم خروجیش تعداد کل کلیدهای مورد نظر توی کل تایم لاینه طبقه این خط
count_arr = sp_array_keys.count
چه پیغامی رو و کی باید بفرسته

:rose::rose::rose:

کد:
#()

این یک آرایه خالی هست که فعلا عضوی درونش نیست همون Array

append

وارد کردن مقادیر (هر نوعی) به یک array رو به عهده داره (به بخش array مراجعه کنید)

کد:
f ooo == ok do (  msg = (sp_array_keys[count_arr]) ; messagebox (msg as string)  )

اگر یک loop به طور کامل اجرا بشه خروجی مکس اسکریپت براش یک ok هست
ولی اگر یک loop وسط راه کامل اجرا نشه مثلا 1 تا 5 یکدفعه در 3 قطع بشه خروجی undefined میده

خب من یکی از حالت های if رو با استفاده از این مقادیر گرفتم اگر در این حالت تایم اسلایدر از همه کلید ها جلوتر باشه پس آخرین کلید باید کلید قبل از currenttime باشه به کد نگاه کنید

=============================
این اسکریپت کلا سه بخش رو کنترل میکنه

فرض کنید از فریم 0 تا 100 موضوع ما انیمیت شده که بینشون 10 کلید موجوده

پس برای currenttime سه حالت وجود داره :
1.. یا بین فریم 0 تا 100 قرار داره
2..یا کمتر از 0 هست مثلا 10f-
3..یا جلوتر از همه کلید ها مثلا روی فریم 130f قرار دارد
 

پرواز

Member
کد:
#()
این یک آرایه خالی هست که فعلا عضوی درونش نیست همون Array

append

وارد کردن مقادیر (هر نوعی) به یک array رو به عهده داره (به بخش array مراجعه کنید)

کد:
f ooo == ok do (  msg = (sp_array_keys[count_arr]) ; messagebox (msg as string)  )
اگر یک loop به طور کامل اجرا بشه خروجی مکس اسکریپت براش یک ok هست
ولی اگر یک loop وسط راه کامل اجرا نشه مثلا 1 تا 5 یکدفعه در 3 قطع بشه خروجی undefined میده

خب من یکی از حالت های if رو با استفاده از این مقادیر گرفتم اگر در این حالت تایم اسلایدر از همه کلید ها جلوتر باشه پس آخرین کلید باید کلید قبل از currenttime باشه به کد نگاه کنید


=============================
این اسکریپت کلا سه بخش رو کنترل میکنه

فرض کنید از فریم 0 تا 100 موضوع ما انیمیت شده که بینشون 10 کلید موجوده

پس برای currenttime سه حالت وجود داره :
1.. یا بین فریم 0 تا 100 قرار داره
2..یا کمتر از 0 هست مثلا 10f-
3..یا جلوتر از همه کلید ها مثلا روی فریم 130f قرار دارد
ممنون
از گفته های شما میشه به این نتیجه رسید که
هر نوع عدد یا کلمه ای رو در listener میشه به مثابه یک خروجی گرفت و ازش استفاده کرد
یعنی فرمانی اجرا میشه و در listener بلافاصله پاسخی میده میشه به عنوان ورودی برای خط بعد استفاده کرد(به جز ارورها) ؟؟

این نقطه کاما ; جالب بودن برای اینکه بشه تو یک خط چند فرمان نوشت و اروری داده نشه اوردی ..این نکته های کلیدی رو تو هلپ مکس ندیدم

:rose::rose::rose:
 
آخرین ویرایش:

Elton John

Member
بله حتی شما از ارور ها هم میتونید استفاده بکنید
-------------------------------------------------------------------
در مورد اون پیغام خصوصی که چند ماه پیش فرستاده بودم باید بگم که من تصمیم دارم از تجربیات خودم و شما و دیگر دوستان اگه مایل بودند برای بررسی دقیق کد ها استفاده کنم ولی به ترتیب مبحث ها

اگه دوست داشتید تاپیک دیگه ای باز بشه و برای هر کد یک توضیح و مثال زده بشه

البته هر زمانی دوستان وقت داشتن یک کد رو تو اون تاپیک مربوط توضیح بدن و مثال بزنند

ولی فقط ترتیب هلپ مکس رو باید رعایت کنیم تا کد ها قاطی نشن و یک مرجع فارسی مکس اسکریپت برای آیندگان باشه

برای شروع من مکس 2010 رو پیشنهاد میدم تا همه بتونن نصب کنن و مشکلی نباشه
 

پرواز

Member
بله حتی شما از ارور ها هم میتونید استفاده بکنید
-------------------------------------------------------------------
در مورد اون پیغام خصوصی که چند ماه پیش فرستاده بودم باید بگم که من تصمیم دارم از تجربیات خودم و شما و دیگر دوستان اگه مایل بودند برای بررسی دقیق کد ها استفاده کنم ولی به ترتیب مبحث ها

اگه دوست داشتید تاپیک دیگه ای باز بشه و برای هر کد یک توضیح و مثال زده بشه

البته هر زمانی دوستان وقت داشتن یک کد رو تو اون تاپیک مربوط توضیح بدن و مثال بزنند

ولی فقط ترتیب هلپ مکس رو باید رعایت کنیم تا کد ها قاطی نشن و یک مرجع فارسی مکس اسکریپت برای آیندگان باشه

برای شروع من مکس 2010 رو پیشنهاد میدم تا همه بتونن نصب کنن و مشکلی نباشه
به شدت موافقم:cool:

هرچند زیاد وارد نیستم و در مجید انلاین هم علاقمند زیادی به این مبحث هم ندیدم
ولی خوشحالم و همراهی میکنم:oops:

شروع هم از شما تا روش کار و تمرین دستمون بیاد
به امید اینکه طلسم مکس اسکریپت هم بشکنه و تو مجید انلاین مطرح بشه
:rose::rose::rose:
 

Elton John

Member
کار هم سادست
اول که یک مبحث آغاز بشه
و در مرحله بعد به ترتیب هلپ مکس، هر کد رو توضیح داده و حداقل یک مثال ساده هم براش زده بشه

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

مثلا در بخش Time در هلپ مکس اسکریپت 10 تا کد وجود داره
کد 1
کد 2
کد 3
کد 4
کد 5
.
.
.

فرضا من کد 1 و 2 رو توضیح دادم یکی دیگه از دوستان باید ادامه کد ها یعنی کد 3 و 4 رو بر عهده بگیرند و همینجوری کد 4 5 6 ... تا مبحث time تموم بشه بریم بخش بعدی

فقط ترتیب رو حتما رعایت کنیم تا بشه کد ها رو بعدا راحتر پیدا کرد

اینجوری نباشه مثلا من 2 تا کد از string ها رو توضیح دادم فردا یه نفر بیاد و در ادامه مثلا کد های بخش array رو توضیح بده اینجوری کد ها مخلوط میشن بنظرم خوب نیست

ولی در مثال ها مشکلی نیست میتونید برای مثال ها در صورت نیاز کد های مختلف وارد بشن

برای اینکه ترتیب بهم نخوره طبق ترتیب هلپ مکس اسکریپت 2010 پیش بره


حالا اگه توضیحات و پیشنهادات بیشتری لازم باشه دوستان دیگه اضافه کنن

 
آخرین ویرایش:

پرواز

Member
کار هم سادست
اول که یک مبحث آغاز بشه
و در مرحله بعد به ترتیب هلپ مکس، هر کد رو توضیح داده و حداقل یک مثال ساده هم براش زده بشه

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

مثلا در بخش Time در هلپ مکس اسکریپت 10 تا کد وجود داره
کد 1
کد 2
کد 3
کد 4
کد 5
.
.
.

فرضا من کد 1 و 2 رو توضیح دادم یکی دیگه از دوستان باید ادامه کد ها یعنی کد 3 و 4 رو بر عهده بگیرند و همینجوری کد 4 5 6 ... تا مبحث time تموم بشه بریم بخش بعدی

فقط ترتیب رو حتما رعایت کنیم تا بشه کد ها رو بعدا راحتر پیدا کرد

اینجوری نباشه مثلا من 2 تا کد از string ها رو توضیح دادم فردا یه نفر بیاد و در ادامه مثلا کد های بخش array رو توضیح بده اینجوری کد ها مخلوط میشن بنظرم خوب نیست

ولی در مثال ها مشکلی نیست میتونید برای مثال ها در صورت نیاز کد های مختلف وارد بشن

برای اینکه ترتیب بهم نخوره طبق ترتیب هلپ مکس اسکریپت 2010 پیش بره


حالا اگه توضیحات و پیشنهادات بیشتری لازم باشه دوستان دیگه اضافه کنن

خیلی عالی:rose::rose::rose:
روش خوبیه
دلیلشم اینه که کد خونی تو هلپ مکس اسکریپت برامون روان میشه و بهتر میتونیم هلپ مکس رو بفمیم

مشکل اصلیه من هم اینه که هنوز با هلپ اسکریپت مکس کنار نیومدم
مثلا
کد:
[LEFT][LEFT][SIZE=2][FONT=Courier New]<node>[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]Assemble [/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]<node [COLOR=#ffffff]array[/COLOR]>nodes[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]  [/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New][[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]name[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]:<string>][/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]  [/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New][[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]classDesc:[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]<class>]  [[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]select:[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]<bool>][/FONT][/SIZE][/LEFT][/LEFT]
منظور مکس از جمله بالا چیه و چی رو میخواد به من بگه هر کد یعنی چی کروشه پرانتز یا غیره
اینه که باید هلپ رو روان بشیم تا راحت تر باهاش کار بکنیم
من خودم اعتقاد دارم هلپ مکس کاملترین هلپیه که تو نرم افزارها دیدم استاد من تو مکس فقط خود هلپش بوده و مطمئنم این موضوع در مورد هلپ اسکریپتشم صد میکنه
فقط باید بفهمیمش
ای کاش دوستان دیگه هم بیاد اعلام امادگی کنن
اگر هم نیومدند مطمئنا با شروع کار میان و با خبر میشن
 

پرواز

Member
سلام بازم سئوال موقعیت شیئی در محور ایکس مثلا
-3.41509e-006
چطوری خروجی رو رند بگیرم
مثلا فقط دو رقم بعد از اعشار رو میخوام
فرمانی ساده برای این کار وجود داره یا نه:rose::rose::rose:
-------------------------------------------
 

Elton John

Member
این عدد نزدیک 0 هست
اونو همون صفر در نظر بگبرید یا در 0 ضرب کنید

این عدد اینه

0.00000341509-
 

پرواز

Member
این عدد نزدیک 0 هست
اونو همون صفر در نظر بگبرید یا در 0 ضرب کنید

این عدد اینه

0.00000341509-
نمیشه صفرش کرد من تا دو رقم بعد از اعشار هم بهش احتیاج دارم
ولی یک نکته دیگه اینکه
کد:
h=quatToEuler $.rotation 
slidertime +=10
g=quatToEuler $.rotation 
P= H.z-G.z
rotate $Plane03 (angleaxis -p [0,1,0])
slidertime -=10
جواب

کد:
(eulerAngles -90 -1.70755e-006 -139.26)
90f
(eulerAngles -90 -1.70755e-006 -104.925)
-34.3345
OK
80f
OK
در فرمان و اسکریپت بالا من موقعیت چرخش یک شئی رو در دو فریم بدست اوردم یعنی مشخص کردم که این شئی از کلید اول تا کلید دوم چه مقدار چرخیده
کد:
h=quatToEuler $.rotation 
slidertime +=10
g=quatToEuler $.rotation
که جواب این شد
کد:
(eulerAngles -90 -1.70755e-006 -139.26)
90f
(eulerAngles -90 -1.70755e-006 -104.925)
یعنی محورهای x و y تغییری نکرده
و تغییر در محور z است پس در اینجا مقدار تغییر محور زد رو بدست اوردم(فقط تغییرات در محور زد رو میخوام)

کد:
P= H.z-G.z
حالا تغییرات رو به شئی دیگه منتقل کردم تا در همان جهت و همان مقدار بچرخه یعنی به محور زد اون ولی شئی در جهت دیگری حرکت کرد
پس به ناچار تغییرات محور زد رو به محور ایگرگ دادم تا هم جهت با شئی اول بشه تازه منفی کردمش.
کد:
rotate $Plane03 (angleaxis -p [0,1,0])
چرا مختصات من در دو شئی متفاوته
البته اینجا مشکل به این صورت حله ولی ....
:rose::rose::rose:
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا