Jump to content
dimaxion

MAXScript absolutny początek

Recommended Posts

Witam, czy macie namiary na strony z tutorialami dla początkujących w tym temacie? Potrzebuję wszystkiego od samego początku. Coś już tam zacząłem, ale w tutorialach dla początkujących jest straszny bałagan. No i w większości z nich, mimo opisywania podstaw, autor zakłada, że choć w małym ułamku liznąłem programowanie.Potrzebuję naprawdę wszystkiego od początku. W poniższym ciągu nie kumam kilku rzeczy (dla jasności - wiem do czego służy, potrafię go skopiować, po części skumać i użyć, ale...): for i in 1 to selection.count do( $lid == true then ($.wirecolor = blue else ($.wirecolor = red)))Nie znam podstaw, więc nie wiem co oznacza i dlaczego jest w kwadratowym nawiasie, co oznacza "1", selection.count, dlaczego poniżej po słowie "red" jest podwójnie zamknięty nawias.Wiem, że to banalne podstawy, ale bez pomocy nie zobaczę w tych znaczkach rudych, brunetek czy blondynek.PozdrKuba

Share this post


Link to post
Share on other sites

To może najpierw przerób jakiś inny język programowania na przykład Javascript - kilka lekcji pozwoli Ci zrozumieć co to jest zmienna, tablica, iterator. MaxScript to nie jest dobry język programowania, a już na pewno nie jest dobry na początek.

Share this post


Link to post
Share on other sites

Ja też nie jestem biegły w Max script ale może to Tobie pomoże.

 

for i in 1 to selection.count

 

wykonuj pętlę (for -> to) dla początkowej wartości zmiennej "i" równej jeden tyle razy ile jest wybranych obiektów ("selection.count")

to co się wykonuje w każdej pętli jest zawarte pomiędzy zewnętrznymi nawiasami

wartość zmiennej "i" zwiększa się o jeden po każdym wykonaniu pętli

 

for i in 1 to selection.count do

( $lid == true then

($.wirecolor = blue

else

($.wirecolor = red)

)

)

 

Nawiasów zamykających musi być tyle samo co otwierających.

Rozpisuj sobie programy umieszczając kolejne instrukcje w kolejnych wierszach. Tak lepiej zobaczysz co się dzieje.

 

($.wirecolor = red)

Umieszczenie tej instrukcji w nawiasach wydaje się zbędne

Generalnie jeżeli ciało pętli zawiera tylko jedną instrukcję, to nawiasy nie są wymagane i w tym konkretnym przypadku pełnią wyłącznie funkcję porządkową. A jak widać nawet wprowadzają nieco zamieszania. Myślę, że można by to zapisać jak poniżej i tez będzie działało.

 

for i in 1 to selection.count do

$lid == true then

$.wirecolor = blue

else

$.wirecolor = red

 

No i jeszcze dlaczego

bo "i" jest indeksem tablicy (array) zawierającej wybrane obiekty i tak się właśnie to zapisuje.

 

Popatrz na strukturę programów pisanych w C#, JavaScript itp. Odnajdziesz wiele analogii do MAXScript.

Tuturiali do MAXScript jest bardzo niewiele.

Jedyna książka jaką znalazłem to "3ds Max MAXScript Essentials" wydana przez Focal Press.

Edited by Dynamico

Share this post


Link to post
Share on other sites

Yo.

 

Na spokojnie możesz obadać helpa maxowego

http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-676FB825-84C1-4708-A398-993266E4D2AD.htm,topicNumber=d30e98789

 

http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-676FB825-84C1-4708-A398-993266E4D2AD.htm,topicNumber=d30e98789

 

 

Odpal sobie MAXScript Listener'a zobacz co się dzieje jak klikasz poszczególne guziki ( nie wszystko jest printowane/wyświetlane, ale pewnie większość )

 

Prócz googli i odrobiny ( a może więcej niż odrobiny ;) ) chęci nie potrzeba Ci nic więcej ... .

 

http://forums.cgsociety.org/showthread.php?t=212440 //szybkie wyjaśnienie czym jest maxScript

 

Nawet maxowe forum coś ma ... http://max3d.pl/forum/threads/3374-Kurs-MAX-Script-temat-2-podsumowanie

 

No nie doradzę nic więcej. Jak z wszytkim - trzeba posiedzieć i zaczyna wychodzić ... w tydzień się tego nie nauczysz.

 

A odnośnie konkretnej odpowiedzi na Twoje pytania

for i in 1 to selection.count do( $lid == true then ($.wirecolor = blue else ($.wirecolor = red)))

-nie wiem co oznacza i ( i jest zmienną ozaczającą tutaj kolejny zaznaczony obiekt )

-i dlaczego jest w kwadratowym nawiasie ( to jest związane ze składnią języka )

-co oznacza 1 ( oznacza, że skrypt ma się wykonać dla każdego -od pierwszego do ostatniego (selection.count) zaznaczonego obiektu)

-dlaczego po słowie red jest podwójnie zamknięty nawias ( zobacz ile razy otwarłeś go wcześniej )

 

Nie pozostaje nic tylko życzyć powodzenia i wytrwałości !

Pozdro.

Share this post


Link to post
Share on other sites

dzięki stokrotne!

Jeszcze tylko kwestia zapisu"i" w "for i in 1..." - tutaj "i" nie jest ujęte w nawiasy.

Spróbuję przerobić solidny materiał z podanych przez Was języków i pewnie za jakiś czas mi się pojaśni:)

Dzięki jeszcze raz!

Share this post


Link to post
Share on other sites

"i" na początku bez nawiasów bo jest to nazwa zmiennej. Mogło by być a, b ,c, blebleble itd.

Na początku przyjmuje wartość = 1 i po każdym wykonaniu pętli zmienia wartość na kolejną - 2,3,4 i tak aż do osiągnięcia wartości równej ilości wybranych obiektów.

A teraz wewnątrz pętli ta zmienna jest wykorzystywana do określenia którym elementem tablicy zawierającej wybrane obiekty się zajmujemy.

Tak więc po kolei wybiera $[1], $[2], $[3] itd.

A nawiasy kwadratowe, bo taka jest składnia tego i nie tylko tego języka.

Napisałem żebyś rzucił okiem na inne języki programowania bo do nich akurat jest mnóstwo kursów od podstaw (w odróżnieniu od MAXScript). A instrukcje (FOR...TO, IF...THEN, ...) i składnia, czyli kiedy kropka, kiedy i jaki nawias, ma wiele analogii, a różnice z kolei bardzo szybko odkryjesz.

No i oczywiście Help do Maxa jak najbardziej, tylko najpierw trzeba wiedzieć czego szukać :-)

Share this post


Link to post
Share on other sites

Dzięki za niegasnące zainteresowanie! W sumie to wszystko logiczne i wprawa to kwestia praktyki. Składnia jest jednak czymś do wkucia na pamięć... no i może w ułamku na chłopski rozum.Robię równolegle z kursem języka C pewien tutorial. Niestety nie działa to tak, jak powinno. Może znajdziecie błąda:delete objectsparentbox = undefinedfor i =0 to 19 do( nebox = Box() if parentbox != undefined then ( newbox.parent = parentbox in coordsys parent newbox.pos = [0, 0, 30] in coordsys parent newbox.scale = [0.95, 0.95, 0.95] rotX = random -10.0 10.0 rotY = random -10.0 10.0 rotZ = random -10.0 10.0 about newbox.parent rotate newbox (eulerAngles rotX rotY rotZ) ))Chodzi o wygenerowanie stosu boxów , z których każdy jest parentem następnego. Każdy jest też względem swojego parenta skalowany i obrócony o powyższą wartość.

Share this post


Link to post
Share on other sites

Dzięki za niegasnące zainteresowanie! W sumie to wszystko logiczne i wprawa to kwestia praktyki. Składnia jest jednak czymś do wkucia na pamięć... no i może w ułamku na chłopski rozum.Robię równolegle z kursem języka C pewien tutorial. Niestety nie działa to tak, jak powinno. Może znajdziecie błąda:

delete objects

 

parentbox = undefined

 

for i =0 to 19 do

(

newbox = Box()

if parentbox != undefined then

(

newbox.parent = parentbox

in coordsys parent newbox.pos = [0, 0, 30]

in coordsys parent newbox.scale = [0.95, 0.95, 0.95]

rotX = random -10.0 10.0

rotY = random -10.0 10.0

rotZ = random -10.0 10.0

about newbox.parent rotate newbox (eulerAngles rotX rotY rotZ)

)

)

 

Chodzi o wygenerowanie stosu boxów , z których każdy jest parentem następnego. Każdy jest też względem swojego parenta skalowany i obrócony o powyższą wartość.

Link:

 

Pozdr

 

Kuba

Share this post


Link to post
Share on other sites

dodam jeszcze co dzieje się u mnie. Po zastosowaniu skryptu pojawia się 20 boxów o współrzędnych [0,0,0]. Czyli nie ma przesunięcia, obrotu ani skali...

Share this post


Link to post
Share on other sites

zapomniałeś o dodaniu zmiennej parentbox = newbox

 

delete objects

 

parentbox = undefined

 

for i =0 to 19 do

(

newbox = Box()

if parentbox != undefined then

(

newbox.parent = parentbox

 

in coordsys parent newbox.scale = [0.95, 0.95, 0.95]

in coordsys parent newbox.pos = [0, 0, 30]

 

rotX = random -10.0 10.0

rotY = random -10.0 10.0

rotZ = random -10.0 10.0

about newbox.parent rotate newbox (eulerAngles rotX rotY rotZ)

)

parentbox = newbox

)

 

niezdefiniowane "parentbox" po każdej pętli nie pozwalało na wykonanie funkcji w drugim nawiasie (przesunięcie, rotację i skalę), stąd skrypt wykonywał jedynie funkcję newbox = box().

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy