
MaxScript의 반항적인 스피너 딜레마 🎚️💡
조명과 스피너로 엄청난 혼란을 만들었네요! 컨트롤들이 "마지막에 들어온 사람이 이긴다" 게임을 하는 것 같아요. 코드 탐정처럼 이 스피너 정체성 문제를 해결해 보죠.
개념적 문제
발생하는 일은 다음과 같아요:
- 모든 핸들러가 동일한 변수 nomobj를 가리킴
- 루프 끝에서 nomobj는 마지막 조명만 포함
- 핸들러는 값을 기억하지 않고 참조를 기억
"컨텍스트 없는 핸들러는 배선 없는 스위치와 같음: 클릭은 하지만 유용한 것은 켜지 않음"
기술적 해결책
올바른 컨텍스트를 캡처하기 위해 클로저를 생성해야 합니다. 이 접근 방식을 시도해 보세요:
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
)
)
핵심 설명
- 각 반복에서 로컬 변수로 컨텍스트 캡처
- 핸들러가 수정할 조명을 "기억"하도록 클로저 사용
- 덮어쓰이는 전역 참조 피하기
이게 작동하지 않으면 (때때로 MaxScript 핸들러 시스템이 특별함), 다른 옵션은:
- 조명에 대한 전역 참조 배열 생성
- 각 스피너에 고유 인덱스 할당
- 핸들러에서 해당 인덱스를 사용해 배열 접근
기억하세요: MaxScript에서, 삶에서처럼 컨텍스트가 전부입니다. 스피너들이 올바른 길을 밝히길! 💡 모든 게 실패하면 영화처럼: "더 많은 조명!" (렌더가 영원히 걸리더라도).