Como controlar múltiplas luzes V-Ray com spinners no MaxScript

Publicado em 25 de January de 2026 | Traduzido do espanhol
Captura de interfaz de 3ds Max mostrando múltiples spinners controlando parámetros de diferentes luces V-Ray, con el editor de MaxScript visible.

O dilema do spinner rebelde em MaxScript 🎚️💡

Que bagunça de luzes e spinners você armou! Parece que seus controles estão jogando no "o último que entra ganha". Vamos resolver esse problema de identidade dos spinners como bons detetives do código.

O problema conceitual

O que acontece é que:

"Um handler sem contexto é como um interruptor sem fiação: faz clique mas não acende nada útil"

Solução técnica

Você precisa criar closures para capturar o contexto correto. Experimente esta abordagem:

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 que captura la luz correcta
    on spinnerName changed val do (
        currentLight.subdivisiones = val
    )
)

Explicação chave

  1. Captura o contexto com uma variável local em cada iteração
  2. Usa closures para que o handler "lembre" qual luz modificar
  3. Evita referências globais que são sobrescritas

Se isso não funcionar (às vezes o sistema de handlers do MaxScript é especial), outra opção é:

Lembre-se: em MaxScript, como na vida, o contexto é tudo. Que seus spinners iluminem o caminho correto! 💡 E se tudo falhar, você sempre pode fazer como nos filmes: "Mais luzes!" (embora depois o render demore uma eternidade).