3dsmaxman Napisano 13 Luty 2007 Napisano 13 Luty 2007 Witam! Chcę napisać prosty skrypt, który będzie wychwytywał zmianę położenia myszy na ekranie i obracał obiekt (narazie Box01 ^^) Oto on: mousex = mouse.screenpos.x mousex = mouse.screenpos.x mousey = mouse.screenpos.y currentmx = mouse.screenpos.x currentmy = mouse.screenpos.y rbut = true (select $'Box01') while rbut do ( rbut = !rButton currentmx = mouse.screenpos.x currentmy = mouse.screenpos.y if currentmx ( while currentmx ( in coordsys local rotate $ (angleaxis 1 [0, 0, 1]) mousex -= 1 ) ) if currentmx > mousex+3 then ( while currentmx ( in coordsys local rotate $ (angleaxis 1 [0, 0, 1]) mousex += 1 ) ) ) Mam pierwszy problem: program sygnalizuje mi błąd w linijce z rbut = !rButton. Dlaczego?
vv3k70r Napisano 13 Luty 2007 Napisano 13 Luty 2007 nie jestem pewien jak w skrypcie maxowym ale msyle ze powinno byc rbut true (ze zawsze i ze wymuszone) i obsluga co sie dzieje jesli jednak nie (czyli wyjescie ze skryptu); wzglednie ustaw na dwa przycisniecia-pierwsze inicjalizuje a drugie upuszcza... sprawdz czy przerwanie dla klawisza jest stale przechwytywane (jakos tale wcisneicie) czy jako kontrola (czy wcisniety)... edit: robilem keidys cos innego pod przyciski w innym skrypcie i tez mailem na tym potkniecie... dlatego proponuje sprawdzic jak jest wymuszenie klawisza.. bo jesli najpierw definiujesz ze jest true a pozneij sprawdzasz bez obslugi wyjatku if false (if false tez dawalem true, tyle ze funkcja sie nei chiala wylaczyc :) )
lechoo Napisano 14 Luty 2007 Napisano 14 Luty 2007 O ile dobrze pamietam to negacje w max scripcie robi sie przy pomocy not a nie wykrzyknika. Jak to zmienisz, to max script wypisze Ci ze zmienna rButton jest undefined. To dlatego ze nie jest to zmienna globalna w maxie ale w lokalna w toolu. Zobacz w helpie rozdzial Mouse Tool Clauses. Zeby zrobic to obracanie obiektu musisz napisac wlasnego toola i dodac obsluge interesujacych cie eventow, w tym przypadku mouseMove. W ciele toola zmienna rButton bedzie juz widoczna i zainicjalizowana w zaleznosci od stanu przyciskow myszy.
3dsmaxman Napisano 15 Luty 2007 Autor Napisano 15 Luty 2007 Po pewnym czasie już do tego doszedłem :) Teraz mam gdzieś błąd nawiasowania (MaxScript oczekuje "while" czy coś takiego). Oto obecny kod: mousex = mouse.screenpos.x mousey = mouse.screenpos.y currentmx = mouse.screenpos.x currentmy = mouse.screenpos.y setSysCur #rotate rollout mywin "STEROWANIE FRANUC" ( group "Sterowanie" ( radiobuttons but "Mysz (x)" pos:[20,20] labels:#("body1","natryskiwacz","body2","przeciwwaga","ramie2") button run "Uruchom!" pos:[20,50] width:60 height:30 ) -- ZMIENNE PRZECHOWUJĄCE KĄTY OBIEKTÓW global body1rot = 0 global przecrot = 0 global body2rot = 0 global mojeramierot = 0 global ramie2rot = 0 global natrrot = 0 global butstate = 0 --NARZĘDZIA MYSZY-- tool mousemvx ( on mouseAbort click do #stop on freeMove do ( currentmx = mouse.screenpos.x if currentmx while currentmx ( in coordsys local rotate $ (angleaxis 1 [0,0,1]) mousex -= 1 ) if currentmx > mousex+3 then while currentmx > mousex do ( in coordsys local rotate $ (angleaxis -1 [0,0,1]) mousex += 1 ) ) ) tool mousemvy ( on mouseAbort click do #stop on freeMove do ( currentmy = mouse.screenpos.y if currentmy while currentmy ( in coordsys local rotate $ (angleaxis 1 [0,1,0]) if butstate == 3 do ( (select $'moje_ramie') in coordsys local rotate $ (angleaxis 1 [1,0,0]) (select $'body2) ) mousey -= 1 ) if currentmy > mousey+3 then while currentmy > mousey do ( in coordsys local rotate $ (angleaxis -1 [0,1,0]) if butstate == 3 do ( (select $'moje_ramie') in coordsys local rotate $ (angleaxis -1 [1,0,0]) (select $'body2) ) mousey += 1 ) ) ) --PRZYCISK "URUCHOM" on run pressed do ( butstate = but.state case butstate of ( 1: (select $'body1') 2: (select $'Box01') 3: (select $'body2') 4: (select $'przeciwwaga') 5: (select $'ramie2') ) if butstate == 1 or butstate == 3 then startTool mousemvy else startTool mousemvx --------------------------------------- on body2g pressed do ( (select $'moje_ramie') in coordsys local rotate $ (angleaxis 1 [1, 0, 0]) (select $'body2') in coordsys local rotate $ (angleaxis 1 [0,1,0]) ) ) ) CreateDialog mywin width:200 height:190 pos:[620,25]
lechoo Napisano 15 Luty 2007 Napisano 15 Luty 2007 W tych liniach (select $'body2) nie masz zamykajacego cudzyslowia, czy jak to sie nazywa :) Event on body2g pressed masz wewnatrz innego eventu, no i nie ma takiego elementu interfejsu jak body2g.
3dsmaxman Napisano 15 Luty 2007 Autor Napisano 15 Luty 2007 Dzięki za pomoc! Już właściwie wszystko działa.
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się