Skocz do zawartości
View in the app

A better way to browse. Learn more.

Max3D.pl

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.