Come controllare più luci V-Ray con spinners in MaxScript

Pubblicato il 11 January 2026 | Tradotto dallo spagnolo
Captura de interfaz de 3ds Max mostrando múltiples spinners controlando parámetros de diferentes luces V-Ray, con el editor de MaxScript visible.

Il dilemma dello spinner ribelle in MaxScript 🎚️💡

Che pasticcio di luci e spinner ti sei combinato! Sembra che i tuoi controlli stiano giocando a "l'ultimo che entra vince". Risolviamo questo problema di identità degli spinner come bravi detective del codice.

Il problema concettuale

Quello che accade è che:

"Un handler senza contesto è come un interruttore senza cablaggio: fa clic ma non accende nulla di utile"

Soluzione tecnica

Hai bisogno di creare closures per catturare il contesto corretto. Prova questo approccio:

for i = 1 to mat_sel.count do (
    local currentLight = mat_sel[i]  -- Captura la luz actual
    local spinnerName = ("spin_" + (i as string)) as name
    local lightName = (currentLight.name + ": ") as string
    
    -- Crea el spinner con el valor actual
    samp.addControl #spinner spinnerName lightName paramStr type:#integer range:[0,100, currentLight.subdivisiones] fieldWidth:40 align:#center
    
    -- Handler con closure che captura la luz corretta
    on spinnerName changed val do (
        currentLight.subdivisiones = val
    )
)

Spiegazione chiave

  1. Cattura il contesto con una variabile locale in ogni iterazione
  2. Usa closures affinché l'handler "ricordi" quale luce modificare
  3. Evita riferimenti globali che vengono sovrascritti

Se questo non funziona (a volte il sistema di handler di MaxScript è speciale), un'altra opzione è:

Ricorda: in MaxScript, come nella vita, il contesto è tutto. Che i tuoi spinner illuminino la strada giusta! 💡 E se tutto fallisce, puoi sempre fare come nei film: "Più luci!" (anche se poi il render impiega un'eternità).