主题:  [技巧]director技巧集锦

D计划-混沌

职务:管理员
等级:6
金币:15.2
发贴:3528
注册:2007/4/9 9:48:37
#312005/4/15 11:59:02
www.5d.cn/bbs/NewsDetail.asp?id=89962
donlee--
director应用技巧

1、设置movie,使之自动缩放以适应屏幕大小
A:使用如下script:
on preparemovie
(the stage).rect=(the desktoprectlist)[1]
(the stage).drawrect=(the desktoprectlist)[1]
end


2、制作带阴影效果的text
field可以作出阴影效果,但在field中应用中文容易死机,我们可以用一个text member但多个sprite,各sprite位置稍稍错开,并适当设置其blend即可。灵活使用之可以得到动态的和彩色的阴影。缺点是数量过多会拖累速度。


3、中文菜单
可以用installmenu的标准方法生成中文菜单,但字体、字号设置全部无效。


4、filmloop播放问题:在一帧内判断一个filmloop播放完毕,再继续播放下一帧。
frame script中含有以下代码,以实现"定格":
on exitframe me
go the frame
end
再把以下behavior拖到filmloop sprite即可:
on exitframe me
--但用prepareframe不行?!
tell sprite(me.spriteNum)
if the frame = the lastframe then
ploopcnt = 1
end if
end tell
if ploopcnt then
go next   --或改为其它命令
end if
end

5、对filmloop的控制。
以下behavior的功能是用于一个filmloop sprite,点击暂停,再次点击则继续。
property ppause,pframe
on beginsprite me
ppause=false
pframe=1
end

on mouseup me
ppause=not ppause
if ppause then
tell sprite(me.spriteNum) to pframe=the frame
end if
end

on exitframe me
if ppause then
if pframe=1 then
tell sprite(me.spriteNum) to go to the lastframe
else
tell sprite(me.spriteNum) to go to pframe-1
end if
end if
end
由此我们也可以知道,我们无法使filmloop的播放速度快于movie,但可以用上法的变通来减慢它。
补充说明:tell sprite...用法类似tell window,但尚未见于正式文档,我使用至今,尚未见其出错。

6、在projector用lingo关闭计算机(用于Windows9X),主要用于触摸屏等无人值守的情况等。
A:无论此时计算机是否有打开的程序或窗口,使用下面的lingo语句可直接关机:(仅限于projector)
open "c:\windows\rundll.exe user.exe,exitwindows"
若要重新启动计算机,改为 "c:\windows\rundll.exe user.exe ,exitwindowsexec"
当然在实际的projector中不能直接用"c:\windows",而要用fileio的getosdirectory()等函数先获得系统相应目录。

7、在runtime动态地改为Director内置的图标
最常用和简单的方法是对于一个sprite,施与以下behavior:
on beginsprite me
sprite(me.spriteNum).cursor=280 --手形光标
end
一般的光标设置以上一句就够了,更具个性化的光标设置这里不谈了。

内置图标(有些是相同的):0-4 200 254 256-269 271-272 280-281 284-286 290-304

8、Lingo支持递归!
用到搜索算法的朋友们应该高兴吧。

9、director中事件发生的顺序

prepareMovie
beginsprite for frame 1
stepFrame for frame 1
prepareframe for frame 1
startMovie
enterFrame for frmae 1
exitfrmae for frame 1

beginsprite for next frame

10、设置搜索路径的合适位置
A:实际上,在prepareMovie前,所用到的cast及相关的member包括其链接关系都应作好准备。
所以不可在movie内为自身设置搜索路径。一般在stub player中设置searchpath为佳。

lovm
我也来凑凑热闹,谈一点经验吧,呵呵。

1、""&A 就可以将数字A转换为字符串。
A=123
put ""&A
--"123"
2、数字字符串与数字相加,得浮点数,如
put "5"+3
-- 8.0000
故在游戏中显示步骤时应注意。
3、由于Director对字母的大小写不分,故比较字母大小写时用 charToNum()、numToChar()。
4、如果影片中有导入带Alpha通道的TIFF文件,则xtras目录中应包括Mix Services.x32文件。
5、当导入GIF文件(以Bitmap Image形式)到Director中时,发现颜色不对,可改以Animated GIF形式导入。
6、如何探测当前帧上的marker(如果当前帧有marker的话)
getProp(markerList(),frame())
7、简单按钮behavior,适合用于有大量按钮,且按钮状态只有普通和高亮两种的情况。一些书上介绍的按钮behavior功能挺强大,但每个按钮都得选择普通、高亮、按下等状态的图片,如果按钮多的话,那会累死。
按钮命名得注意,得这样命名:普通状态 aaa, 高亮状态 aaa_l 。
property pSprite,pOldSpriteMem

on beginSprite me
pSprite=sprite(me.spriteNum)
end

on mouseEnter me
cursor 280
pOldSpriteMem=pSprite.member --将原来的按钮保存,以备恢复。
pSprite.member=member(pSprite.member.name&"_l"
end

on mouseLeave me
cursor 0
pSprite.member=pOldSpriteMem --恢复
end

on mouseUp me
mouseUpEvent me --调用movie script,以解决不同按钮不同的mouseUp事件。
end



yrhong

职务:普通成员
等级:1
金币:0.0
发贴:5
注册:2005/4/13 10:46:13
#322005/4/15 13:19:38
强者,我顶顶顶啊顶顶顶啊!



e哆咪

职务:普通成员
等级:1
金币:0.0
发贴:23
注册:2005/4/27 13:23:16
#332005/4/28 9:40:39
谢谢,大侠指点啊:)


【灵城设界】:http://www.lingcity.com
灵城设界,灵感的国度,自由的设界。灵城设界欢迎您的光临。
网站策划,网站建设,网页设计,平面设计,插画设计,cis企业形象识别策划,logo设计,动画设计,角色设计,多媒体编辑,印刷排版输出。

y2006

职务:普通成员
等级:1
金币:0.0
发贴:8
注册:2006/12/23 17:20:18
#342007/1/3 21:34:53
感谢再感谢



bing811

职务:普通成员
等级:1
金币:0.0
发贴:1
注册:2005/5/15 18:04:39
#352007/5/28 21:41:54
又学到东西了哦~~~



眼睛小 脖子粗

职务:普通成员
等级:1
金币:0.0
发贴:4
注册:2008/10/22 21:49:57
#362009/1/7 10:13:56
学习学习