热烈欢迎新会员,新手报到帖maxscript BUG和技巧收集场景助手3.0下载飞浪脚本零起点入门
返回列表 发帖

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

[原创]飞浪脚本零起点入门系列(七)Maxscript对话框--rollout和createdialog语句初探

声明:本教程为CG++原创,转载请注明,谢谢合作:)
 
查看上一节: MAXScript的条件选择语句和找面数为0的物体 

http://www.cgplusplus.com/bbs/viewthread.php?tid=174

 

飞浪脚本零起点入门系列(七) Maxscript对话框--rollout和createdialog语句初探

 

本节关键词: rollout  editText  button  Maxscript Editor  Visual MAXScript  createdialog

 

前六节我们进行了简短的Maxscript学习,大概了解了MAXScript的一些基础语句,也学会了编写一些处理大量物体或者材质的简单程序代码,这些代码都是通过maxscript listener直接执行的。这一节里,我们来学习一下如何将这些代码写成界面,写成一个按钮,写成大家通常见到的ms格式的文件。这里面要用到一些新的语句,这些语句本身不具备处理max场景数据的能力,它们只是把我们以前学的代码进行归纳,方便使用。

首先我们要用到的是MAX脚本编辑器(Maxscript Editor),通过MAX菜单--MAXScript--New MAXScript...可以新建一个max脚本窗口,它就跟一个记事本差不多,以后我们所有的代码将在这里进行编写。

 

此编辑器的具体用法,我们在使用中进行讲解。本人用的是max9,不同版本的MAX脚本编辑器会有所不同,特别是max2009的MAX脚本编辑器先进很多。废话就这些,直接切入主题。
首先我们在MAX脚本编辑器(以后简称Editor)里写下如下代码:
rollout myrollout "test"
(
)

讲解:rollout--这是maxscript保留关键词,只要它出现就表示这儿有个新的卷展栏。
myrollout--这是你自己定义的一个变量,它必须遵循变量的命名规则,详见第三节。
"test"--这是此卷展栏标题的名称,引号里面内容任意填写。
现在把光标放在rollout到反括号任意位置,找到并选择Edit--Edit Rollout,快捷键F2,注意这是max9的编辑方式,其它版本自己找一下。

 

这样就会弹出一个新的界面,上面标题是:myrollout - Visual MAXScript意思就是卷展栏myrollout的可视化编辑。Visual MAXScript,可视化max脚本,完全可视化界面编辑,省去我们非常多的时间,以后我们就要在这个界面完全一个又一个“鸿篇巨制”,嘿嘿,开个玩笑。对于界面编辑来说,它非常重要!

下面了解下它的用法:

创建一个编辑文本控制器:

 

再创建一个按钮:


 这样我们就得到这样的代码:
rollout myrollout "重命名" width:162 height:98
(
 editText edt_name "名称:" pos:[5,7] width:152 height:22
 button btn_rename "重命名" pos:[25,45] width:107 height:22
)
我们注意到,rollout myrollout "重命名"后面多了两个参数,宽度和高度,这是我们在Visual MAXScript拖放窗口时,自动生成的,当然你也可以手动设置。再看另外两行:
editText edt_name "名称:" pos:[5,7] width:152 height:22
editText --表示这是一个编辑文本。
edt_name --是变量名,以后要调用这个编辑文本就用这个置。
"名称:" --这个编辑文本的名称,出现在脚本界面。
pos:[5,7]--此编辑文本在脚本界面的相对位置,可以在刚才Visual MAXScript界面用上下左右键调整。
width:152 height:22 --此编辑文本的宽度和高度。
下面的button 意思差不多,只不过把控制器类型(Controls)换成了按钮(button)
上面的editText和button都是rollout的控制器类型,这些控制器可以在Visual MAXScript拖出来。
rollout的所有控制器:

 http://www.cgplusplus.com/online-reference/maxscript-reference/source/rollout_user_interface_controls_types.htm

 

我们在程序最后加上一句代码:createdialog myrollout,于是此脚本就成为:
rollout myrollout "重命名" width:162 height:98
(
 editText edt_name "名称:" pos:[5,7] width:152 height:22
 button btn_rename "重命名" pos:[25,45] width:107 height:22
)
createdialog myrollout

再执行File--Evaluate All (快捷键ctrl + E)这样就执行了这个脚本程序,

出现什么了没?我运行出现以下对话框:

 

[此贴子已经被作者于2009-2-12 17:24:03编辑过]

附件: 您需要登录才可以下载或查看附件。没有帐号?注册  
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

这就是我们刚才编写的脚本界面。有一个输入框,一个按钮,但是你单击按钮没有任何反应,因为我们还没有告诉它应该做什么。
现在,单击File--save保存此脚本,快捷键ctrl+s,取个名字,记着要养成时刻保存的好习惯,万一max挂了或者断电什么的,你就白写了。
再次进入Visual MAXScript进行如下操作:

 

我们得到:

 

这次多了一句:
on btn_rename pressed  do

)
这句就是当按钮btn_rename按下时,该干什么,干什么呢?括号里面就是应该干的内容,现在是空的就是什么也不干,呵呵。。。
关于button的参考如下:

http://www.cgplusplus.com/online-reference/maxscript-reference/source/button.htm
好,回到我讲的第五节,有个重命名脚本,是这样的:for i in objects do i.name = uniquename "cgplusplus"这里我们只想命名选择的物体应该是:
for i in selection do i.name = uniquename "cgplusplus"
但是"cgplusplus"是个常量,我们想要用户可以自己输入,写到此脚本里面就是:
on btn_rename pressed  do

 if edt_name.text != "" then
 for i in selection do i.name = uniquename edt_name.text
)
这里,edt_name.text表示编辑文本edt_name里面输入的内容,具体用法可以参考:
http://www.cgplusplus.com/online-reference/maxscript-reference/source/edittext.htm

if edt_name.text != "" then意思是,如果此编辑框里面内容不是空的,就执行下面命令(重命名)
至此,本脚本的完整代码如下:
rollout myrollout "重命名" width:162 height:98
(
 editText edt_name "名称:" pos:[5,7] width:152 height:22
 button btn_rename "重命名" pos:[25,45] width:107 height:22
 on btn_rename pressed  do
 ( 
  if edt_name.text != "" then
  for i in selection do i.name = uniquename edt_name.text
 )
)
createdialog myrollout

好了,你再运行一下此代码,选择几个物体,在文本框输入字符,再单击重命名,是不是已经完成命名了呢?这就是一个简单的MAX脚本对话框。此节就到这里。
题外话:写此教程最开始的目的就是想共享一下我的学习经验,因为我当初学习脚本时找遍网络也没有找到想要的入门教程,于是我就硬着头皮啃英文参考文档,我想肯定还有
很多想学习脚本而不知如何入门的同仁,如果你真想学好脚本,请一定要记住两个字:坚持。

 

下一节:飞浪脚本零起点入门系列(八)maxscript全局变量、局部变量及注释

http://www.cgplusplus.com/bbs/viewthread.php?tid=326

[此贴子已经被作者于2009-1-16 12:31:28编辑过]

附件: 您需要登录才可以下载或查看附件。没有帐号?注册  

TOP

欢迎捐助本站:支付宝账号 cgplusplus@qq.com,谢谢支持!

强烈支持![em57]

TOP

 恩,很好的入门文章!!

TOP

顶啊,加油出,呵呵,期待更多ing

TOP

请问
若是离开了对话框
该怎样才可以把 edt_name 变量数值转
到另一个变量名称中呢?
烦请飞浪作者可以解答一下
谢谢

[此贴子已经被作者于2009-1-3 14:31:06编辑过]

TOP

edt_name.text可以直接读取,如你可以直接用赋值方法:mystring = edt_name.text就把edt_name 变量数值存到了mystring 变量里面。

TOP


谢谢 feilang 的解答

feilang 您说的句子我补上去了,不知道对不对?
rollout myrollout "重命名" width:162 height:98 (
...
on btn_rename pressed do (
if edt_name.text != "" then
mystring = edt_name.text --在这里
...
)
)
createdialog myrollout

不好意思,可以再请问几个问题吗?

当一个移转的变数资料,
若超过了 rollout(..) 包含的内容外,
该怎样才能继续存在这个值呢?

我是过宣告
persistent global glts01
这样就行了..

但请问HELP 常出现 foo, baz, bar ,
这些字是否为系统关键的保留字呢?

烦请各位高手可以解答一下,
谢谢!!!

TOP

,楼主很敬业,支持一下

 

目前也在学习中.

 

有没有Script脚本的群呀?

TOP

不错,非常感谢楼主!!

TOP

返回列表