Skocz do zawartości

Featured Replies

Napisano

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?

  • Odpowiedzi 5
  • Wyświetleń 2,3k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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

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
  • 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

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

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności