Maxscript-通用事件反馈

xiaoxiao2021-02-28  131

新手学习笔记,大佬勿笑,有不对的还请指出!!

今天在群里问大佬问题,就是下面GIF 图中的,用 spinner 滑杆来控制 box 的大小,一开始我印象中记的有个词是可以直接把 box.length ,width等属性和 spinner .value实时连起来的(实际没有这么个词)。结果大佬说用 changed  ,我想这是土办法啊!(我外行。。。!!) 如下:

rollout sizebox "box" ( button c "box" spinner f "length" range:[1,500,30] type:#Integer Spinner g "height" range:[1,500,30] type:#Integer spinner h "width" range:[1,500,30] type:#Integer on c pressed do ( a=box() a.length = f.value a.height = g.value a.width = h.value ) on f changed val do ( $.length = $.length = f.value ) on g changed val do ( $.height = $.height = g.value ) ) createdialog sizebox 这样确实是可以的,但是有个问题,就是如果在修改面板下修了 box 的属性参数,box是变了,但是spinner .value却没有跟着变! 这样就只是有了两个独立控制。

然后大佬就被我搞烦了。。。。

解决不了就只能看书啊,,王华 《3ds MAXScriptjie脚本语言完全学习手册》 看到这章就感觉是这个了。通用事件反馈机制,从外部代码里存取Utility内部变量和控件

不多说还是给例子吧,看的清楚,这个和上面的其实是一样的,只是表现对象从 box 换成了时间轴。

fn f_get_anim_time = ( testfoo.f_start.value = (animationRange.start as integer)/TicksPerFrame testfoo.f_end.value = (animationRange.end as integer)/TicksPerFrame ) callbacks.addscript #animationRangeChange "f_get_anim_time()" id:#f_get_anim_time Utility testfoo "Time line"( slider get_time "" range:[1,500,30] orient:#horizontal ticks:1 Spinner f_start "Start:" range:[-99999,99999,((animationRange.start as integer)/TicksPerFrame)] type:#Integer spinner f_end "end:" range:[-99999,99999,((animationRange.end as integer)/TicksPerFrame)] type:#Integer on f_start changed val do ( animationRange = interval f_start.value f_end.value ) on f_end changed val do ( animationRange = interval f_start.value f_end.value ) )按上面 box 的例子来的话,spinner  changed 只能 改变时间轴动画区间,

animationRange.start animationRange.end 这两个参数,如果是手动按住ctrl + Alt +鼠标左键 拖动时间轴来改变动画区间 start 和 end 。spinner. valve 一样不会变, 一但去动滑杆 ,start 和 end又会跳到 以spinner.value为准了。

而我想要的效果是 当我鼠标拖动时间轴时,spinner 上的 strat 值也会跟着变,同时当我调整滑杆上是 strat 值时间轴也会动。如下图:

列子代码已贴,新手看的不明白,就看看《3ds MAXScriptjie脚本语言完全学习手册》一书中我提到的那两节应该就懂了。

转载请注明原文地址: https://www.6miu.com/read-66527.html

最新回复(0)