Comment contrôler plusieurs lumières V-Ray avec des spinners en MaxScript

Publié le 19 January 2026 | Traduit de l'espagnol
Captura de interfaz de 3ds Max mostrando múltiples spinners controlando parámetros de diferentes luces V-Ray, con el editor de MaxScript visible.

Le dilemme du spinner rebelle en MaxScript 🎚️💡

Quel sacré bazar de lumières et de spinners tu t'es monté ! On dirait que tes contrôles jouent à « le dernier arrivé gagne ». Allons résoudre ce problème d'identité des spinners comme de bons détectives du code.

Le problème conceptuel

Ce qui se passe, c'est que :

« Un handler sans contexte est comme un interrupteur sans câblage : il clique mais n'allume rien d'utile »

Solution technique

Tu dois créer des closures pour capturer le contexte correct. Essaie cette approche :

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

Explication clé

  1. Capture le contexte avec une variable locale à chaque itération
  2. Utilise des closures pour que le handler « se souvienne » de quelle lumière modifier
  3. Évite les références globales qui se écrasent

Si cela ne fonctionne pas (parfois le système de handlers de MaxScript est spécial), une autre option est :

Souviens-toi : en MaxScript, comme dans la vie, le contexte est tout. Que tes spinners illuminent le bon chemin ! 💡 Et si tout échoue, tu peux toujours faire comme dans les films : « Plus de lumières ! » (même si ensuite le rendu prend une éternité).