Napisano 13 Luty 200718 l 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?
Napisano 13 Luty 200718 l 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 :) )
Napisano 14 Luty 200718 l 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.
Napisano 15 Luty 200718 l Autor 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]
Napisano 15 Luty 200718 l 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.
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto