Publicado el 14/6/2025, 10:16:08 | Autor: 3dpoder

Cómo controlar múltiples luces V-Ray con spinners en MaxScript

Captura de interfaz de 3ds Max mostrando múltiples spinners controlando parámetros de diferentes luces V-Ray, con el editor de MaxScript visible.

El dilema del spinner rebelde en MaxScript 🎚️💡

¡Vaya lío de luces y spinners te has montado! Parece que tus controles están jugando al "último que entra gana". Vamos a solucionar este problema de identidad de spinners como buenos detectives del código.

El problema conceptual

Lo que ocurre es que:

"Un handler sin contexto es como un interruptor sin cableado: hace click pero no enciende nada útil"

Solución técnica

Necesitas crear closures para capturar el contexto correcto. Prueba este enfoque:

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

Explicación clave

  1. Captura el contexto con una variable local en cada iteración
  2. Usa closures para que el handler "recuerde" qué luz modificar
  3. Evita referencias globales que se sobrescriben

Si esto no funciona (a veces el sistema de handlers de MaxScript es especial), otra opción es:

Recuerda: en MaxScript, como en la vida, el contexto lo es todo. ¡Que tus spinners iluminen el camino correcto! 💡 Y si todo falla, siempre puedes hacer como en las películas: "¡Más luces!" (aunque luego el render tarde una eternidad).

Enlaces Relacionados