Maxscript-通用事件反馈

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

今天在群里问大佬问题,就是下面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脚本语言完全学习手册》一书中我提到的那两节应该就懂了。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值