Director软件使用问题解答

      玩玩 2004-2-27 14:12
Director软件使用问题解答

  问题:为什么Director总是报告“where is ......”(找不到链接的媒体文件,如mov、wav文件)?
  答:很多人以链接方式导入的媒体文件(例如QuickTime、wav、aiff、avi等文件)在变换了路径后会出现找不到媒体文件的情况。
  解决方法很简单,那就是使用the ssearchpaths这个系统属性列表。the searchpaths告诉Director到哪里去找媒体文件。通常我们将媒体文件以一种层次结构方式组织在光盘上,例如projector文件放在光盘的根目录下,声音文件放在sounds目录下,视频文件放在video目录下。
  当Director加载媒体文件的时候,它会首先查看媒体文件最初的连接地址,如果没有找到该文件,会接着在电影文件的当前目录下查找该媒体文件,如果还是没有找到,它就遍历the searchpaths中的所有路径。the searchpaths中的每一个项目就是一个路径。因此解决方法就是在每个Director电影文件的movie script中加入句柄:
  on startmovie
  append the searchpaths, the moviepath&″video″
  append the searchpaths, the moviepath&″sounds″
  end
  the moviepath返回当前电影文件的路径名,例如果光盘是d盘,电影文件放在光盘根目录下,那么the moviepath就返回d:\,和“video”结合就成了d:\video,合并后的路径通过append附加在the searchpaths后,Director就知道到什么地方查找该文件了。
  问题:我希望Director电影文件放在硬盘上(考虑到速度问题),而媒体文件放在光盘上,我该如何做?
  答:这种做法在国外是很普遍的,因为Director制作的文件通常都非常庞大,放在光盘上运行的确很慢。国内制作的光盘大多数将电影文件放在光盘上,再在光盘的根目录下放一个autorun.inf,当用户插入光盘后,就进入Director电影文件漫长的加载过程。因此国外的这种做法很值得推荐,但是并不是所有人都喜欢这种做法,因为这种方法需要制作一个安装程序将Director电影文件安装到用户的硬盘上,对于用户来说,这种做法不如使用autorun更直接。
  解决方法同样涉及路径问题,只是你必须判断用户的光驱符号,然后将它和子目录结合为新路径,附加到the searchpaths属性列表(具体实现见附录)。
  问题:如何在Director中使用pdf文档?
  答:这个问题的解决方法涉及将来很多类似问题的解决,那就是如何在Director中使用activex技术。很奇怪的是这种技术在Director中的使用并不多,似乎没有受到重视。我最近在制作一张光盘中使用了这种技术。实际证明这种技术很有效,当然你得在程序的开头编写提示用户安装acrobat reader的代码。
  Director很多功能需要通过购买第三方的xtra实现,通常这些xtra都很贵。比如使用pdf xtra。但是避开购买pdf的xtra,通过使用activex,你完全可以将acrobat reader的所有功能集成到Director中来,因为免费发放的acrobat reader中包含了一个activex控件。在安装完毕后这个控件自动注册(具体实现见附录)。
  问题:如何在Director中播放mpeg文件?
  答:在Director中播放mpeg文件的方法主要有三种:
  1.使用mci,这种方法和Director的集成不好,不建议采用。
  2.使用xtra与Director集成,但是需要额外购买。
  3.使用activex与Director集成,不需要额外购买。
  在这里我们介绍第三种方法。
  其实这个解决方法和上面读入pdf的方法相同,在设置和编程上稍有出入。
  具体解决方法如下:
  在Director中引入acrobat reader activex控件。
  选择insert→control→activex。
  然后在出现的对话框中选择“activemoviecontrol object"。
  单击ok按钮后进入第二个activemovie activex属性对话框。
  滚动属性标签中的属性直到属性filename名出现。单击按钮“..." (新的版本可能不包含按钮“...",你可以使用lingo),然后单击"browse"按钮去选择要播放的avi或mpg文件。将此控件插入到Director中。
  将这个刚刚插入的activex控件从角色库中拖放到舞台上。
  点击Director中的播放按钮,就可以看到mpeg文件的播放了。
  也可以通过lingo编写程序访问此控件,例如run是这个控件的一个方法。也可以在一个按钮中附上下面的代码:
  on mouseup
  run (sprite 1)
  --假设控件所在通道为1
  end
  注:activex视频对象总是直接写屏的,它的direct to stage总是设置的,这使得它超越Director通道的安排次序,总是在最上面。
  问题:什么是shockwave,什么是tech.sina.com.cn/introduction/focus/flash.html target=_blank>flash,为什么shockwave比flash提供更高的帧速率?
  答:shockwave和flash是macromedia提供的两种网上流媒体播放技术。flash是一种网上矢量动画技术并带有一定的交互编程功能。shockwave是一种更加复杂的播放技术,由于它提供了强大的、可扩展的脚本引擎,使得它可以制作聊天室、操作html、解析xml2文档、控制矢量图形,两者都是流媒体技术。但是flash启动非常快,而shockwave启动没有flash快。flash是用flash软件制作,文件后缀名是swf(shockwave flash format),shockwave是用Director制作,文件后缀名是dcr。
  帧速率决定了媒体可以播放的最高速率,shockwave和flash的实际播放速率通常由于播放所需的计算量过大而达不到指定的播放率。二者的内部引擎不同,shockwave的帧速率通常在30~60之间,而flash的帧速率在7~12之间。shockwave本质上使用一个高性能的点阵复合引擎,而flash实质上是一个实时矢量到点阵的渲染引擎。通常矢量到点阵的渲染要比简单的将点阵图像复合更加耗时,这就是为什么shockwave可以比flash提供更高的帧速率。
  一句话:flash是一个矢量动画软件,而Director制作的shockwave更多是基于点阵的动画。但是很多人并不清楚这些,致使在flash中嵌入大量的位图,使得文件很大。也有的人总觉得flash比shockwave慢,却不明白个中原因。
  附录1在Director中使用pdf文档的具体实现
  1.在你的光盘中放入一个很特殊的文件(名字尽量不要和可能出现在任何盘的根目录下的文件重名),比如你公司的名字(mycorporation.txt)。
  2.编写判断光盘驱动器的函数:
  on checkdrive uniquefile
  repeat with i = 67 to 90 --字母a到z的循环
  set drive = numtochar( i )
  --将a到z的ascii码转换为字符
  set thispath = string(drive&″:\″&uniquefile)
  set myfile = new(xtra″fileio″)
  --创建fileio xtra的实例
  openfile(myfile, thispath, 1)
  --打开指定的文件
  if status(myfile) = 0 then
  --如果打开文件成功返回0
  set myfile = 0 --从内存中删除该实例的指针并返回drive&″:″
  exit
  end if
  end repeat
  set myfile = 0
  --从内存中删除该实例的指针
  alert″请插入正确的光盘″
  end
  3.编写你的movie script脚本:
  on startmovie
  mycd = checkdrive(″mycorporaion.txt″)
  append the searchpath, mycd&″\video″
  append the searchpath, mycd&″\sounds″
  end
  这样就可以在光盘上放置媒体文件,把Director电影文件放在硬盘上,而不必担心会出现问题了。
  附录2电影文件放在硬盘上、媒体文件放在光盘的具体实现
  1.安装acrobat reader(为了自动注册acrobat reader activex控件)。
  2.在Director中引入acrobat reader activex控件。
  选择insert→control→activex。然后在出现的对话框中选择“acrobat control for activex"。
  单击ok按钮后会进入第二个acrobat reader activex属性对话框。
  如果你知道pdf文件的路径,可以直接在该对话框中指定。所指定的路径是绝对路径,在此控件的src属性中不能指定相对路径。
  单击ok按钮后则关闭属性对话框,这个时候你已经将activex控件插入到cast角色库中。将这个刚刚插入的activex控件从角色库中拖放到舞台上,可以尽量拉伸这个sprite直到你希望的大小。
  如果当前的Director电影处于播放状态,你就会看到所指定的pdf出现在舞台上。
  但是这种方法不实用,除非你用硬盘播放你的演示程序。通常我们希望使用相对路径(相对电影文件所在的目录下的子目录中放置pdf文档)。那么你不必在此控件的src属性中设置任何参数,可以使用lingo设置该控件的src属性。具体程序如下:
  在mouseup或enterframe等句柄中编写如下的程序:
  on mouseup me
  sprite(1).src = the moviepath&″mypdf.pdf″--假设acrobat控件放在1通道中
  end
  on exitframe me
  sprite(1).src = the moviepath&″mypdf.pdf″
  end
  将如上的句柄放在acrobat控件所在sprite的sprite脚本中即可。

请问director的按钮用什么语句可以打开本机的一个htm文件? 用这个语句好象不行: open "test.htm" 请热心人帮助,谢谢了!

1、on mouseUp
gotoNetPage "c:/test.htm" //gotoNetPage后面放入绝对地址。
end

2、
on mouseUp open "c:/test.htm" with "C:\Program Files\Internet Explorer\IEXPLORE.EXE"end//用open的话后面要带上打开的程序。

鼠标隐蔽
on idlecursor 200 --掩藏鼠标sprite(11).puppet = 1 --木偶一个空闲通道sprite(11).member =member("castom cursor") --在空闲通道上设置鼠标sprite(11).ink = 36sprite(11).locH = the mouseHsprite(11).locV = the mouseVupdateStage end

录音功能:
LMAudioX.x32 可以实现, 在HTTP://www.jinhoo.com下载

如何设置鼠标单击的属性 :
把on mouseup me pyes=0 go to marker("page")end 改為:on mouseup meif pyes thengo to marker("page")pyes=0end ifend

在director中,怎么设置播放的动画为全屏??:
File->Creat Projector于对话框中: Option选中: Options: Full Screen

如何通过点击按钮发出按钮声.:
on mouseupbeep或者puppetsound 1,member 声音名字end这样可以发出蜂鸣声音

我想在一到十帧让背景音乐循环播放.请部如何做?:
1、loop,不就ok 了
2、
若是内部成员,则loop即可若播放外部声音文件,在一帧加on enterframe sound playfile 1,"your music"end 在十帧加on exitframe if not soundbusy(1) then sound playfile 1,"your music" end if go to the frameend

请教1024X768的作品怎样强制缩放 ... :
on startmovie me(the stage).rect = (the desktopRectList)[1](the stage).drawRect = (the desktopRectList)[1]end这样就可以了,影片永远都是全屏显示。

小弟用directmediaxtra插入了几个影片,分别是几个栏目,现在可以实现的是点击某个栏目就播放某个影片,但客户要求如果不点击的时候程序会自动往下播放。
请问各位大侠应如何达到这样的效果???:
on exitFrame me myMember = sprite(spriteNum).member myDuration = member(myMember).duration myMovietime = sprite(spriteNum).movieTime if myDuration > myMovietime then go to the frame else go to the frame + 1 end ifend

视频控制几则!! 
video 控制 --(假设 video 在 sprite 1 )--video播放(paly),暂停,倒转,从头播-- 播放键--on mouseDownset the movieRate of sprite 1 to 1 end --暂停键-- on mouseDownset the movieRate of sprite 1 to 0 end --倒转键--on mouseDownrepeat while the mouseDownif (the movieTime of sprite 1 >= the duration of member 1) or (the movieTime of sprite 1=0) thenset the movieRate of sprite 1 to 0repeat while the mouseUpnothing end repeatplay frame 1 --回到播放此video的frame开始处 elseset the movieRate of sprite 1 to -1end if end repeatset the movieRate of sprite 1 to 1 end--从头播放-- on mouseDown set the movieTime of sprite 1 to 0 set the movieRate of sprite 1 to 1 end 在movie间跳转 go to frame 10 of movie "game1" go to "maker1" of movie "movie1" go to movie "movie1"

我用的是DirectorMX,我想在我的电影里面加上我的邮箱地址,还有我的个人主页,当别人观赏电影的时候能随时进入我的主页然后给我意见,我不知道如何实现,请高手指教:
goToNetPage "mailto:***@***.com"

beginSprite
prepareFrame
enterFrame
exitFrame
endSprite
这几个帧语句在实列中有什么不同呢,谁解答一下或举一个实例{:
beginSprite --這一幀里首次出現了某個sprite時運行。prepareFrame --每次播放頭進入當前幀前執行。enterFrame --每次播放頭進入該幀的時候就執行。exitFrame --每次播放頭退出該幀的時候執行。endSprite --播放頭离開一個sprite并且進入了一個不存在該sprite 的幀中的時候執行。




ALt+F4组合键on startmovie set the keyDownScript to "mykeydownScript"endon mykeydownScript if the optiondown and the key=118 then quit end ifend ALt+F4组合键,我自己写的呢,发上来显摆一下~~
我也“优化”了一下呢:on keydown if the optiondown and the key=118 then quit end ifend 真的啊?一直认为在D中不会是这样关闭窗口的呢,如果真是巧合的话,那我白写了,应该写相反的程序了。
on startmovie the exitlock=1end on KeyDown me end on KeyUp me end试试这个,可以屏蔽的。
怎样用一个按钮控制声音的播放和停止呀?  :
1、
puppetSound 1 , "sou1" 和 puppetSound 1 , 0 这两段语句用一个按钮控制?

2、
[这个贴子最后由牟瓜在 2003/09/11 04:29pm 第 2 次编辑]on mouseupif sound(1).status<>3 thenpuppetSound 1 , "sou1" elsepuppetSound 1 ,0end ifend


使用DirectMedia.X32中的常遇问题:
在使用DirectMediaXtra中常遇到的问题:
有很多朋友都在问有关DirectMediaXtra的问题,整理些常见的问题,希望对初学者有些帮助。有出入的地方请指正,不足之处也请跟帖。我也会陆续补充。

1.为什么打包后,常常出现文件定位的对话框?该如何解决呢?
答:如果你仔细观察一下该插件的设置面板就会发现这样的一个复选框:Show locate file dialog at runtime,表示如果在运行时没有找到要播放的文件,则自动定位该文件。我们可以在编辑时将该选项勾掉,也可以用Lingo来控制showlocatefiledialog=false,然后在Searchpaths一项中点“add”加入搜索路径。
通常我们常常还要再加一道保险,就是在电影目录下建立一个Lingo.ini文件,内容如下:
on startup
set the soundkeepdevice to 0
-- Added to look for files in the "media" subdirectory
global tbsearchpath
set tbsearchpath=[]
append(tbsearchpath, the applicationPath & "media\")
append(the searchpaths, the applicationPath &"media")
end startup
注:如果把要播放的电影放在与projector同目录下,则不会出现文件定位的对话框。
2.为什么动态加载视频文件,在切换文件播放时会闪现一下初次设定文件第一帧的残影?
答:这种情况我以前也遇到过,经过实践总结的原因是这样的:
如果该语句 member(“AV”).file=the moviepath&”movies\aaa.mpg”是在 exitframe 中执行的,则会产生上述的结果!解决的办法是,让该语句在 prepareframe 中执行。具体原理可参见prepareframe和exitframe的含义。
3.为什么在使用setfullscreen命令来全屏播放,编辑环境下正常,而发布后无法通过响应我的鼠标或键盘事件来恢复原始大小?
答:要明白这一点,得知道DirectMedia Xtra的全屏播放的原理:setfullscreen利用ActiveMovie/DirectShow来实现全屏播放。即它是新建一个全屏的窗口来播放,这时它的全屏播放方式是完全独立的,无论你的程序是否工作在全屏状态下。在此期间不响应鼠标和键盘事件,因此要利用提示点来返回程序,而且在结束时要使用一次RemoveFullScreen()函数
解决的方法有两种:
1.发布时,设置Playback项,在Animate in Background复选框前打勾;
2.编写一个全屏播放的行为。其原理为:
1)用the deskTopRectList来获得显示器的分辨率,进而得到屏幕大小;
2)放大影片中视频精灵大小,更改其位置以适应全屏;
3)在需要的事件中恢复原始尺寸及位置。
3.为什么用DirectMedia Xtra自带的控制条在播放完后,再点那个播放按钮却不能从头播放?
答:确实是有这样的情况。它本身自带的控制条并不怎么好,外观也差,还是写个行为吧!
4.动态加载视频文件,如果有个文件无法播放,而再选其他正确的文件来播放,就会仍然是一片空白,而无法播放,该怎么办?
答:在一般的项目中是不会出现这类问题的,除非你想做个播放器。对于这个问题我也暂时无能为力。还在研究中...(提供个思路:先用FileIO来读取要播放文件的文件头,通过与标准格式的文件头比较来判断是否为支持的文件格式)
5.当我在数字电影正播放画面的时候,跳转到其他帧时,舞台上会留下视频的残影,该如何解决呢?
答:要去除已播放完毕但仍留在舞台上的视频的图象,在电影放完后的第一幀用一个脚本强制使它更新整个屏幕。
on exitFrame me
the stageColor = the stageColor
end

6.视频播放不动,是为什么?
答:视频文件播不动,这是和机器的性能也有一定的关系。CPU速度太低,一些像Sorenson的视频解码格式由于使用了高速压缩,所以需要大量的CPU占有率;过多的更新--试图木偶化速度通道,当在播放视频时设定其为1帧,其目的是减小更新场景的次数。
7.我想在视频上再加一层,但总是被视频遮住了,该怎么办?
答:将控制元素放置在视频精灵之上的唯一方法就是利用一个miaw(窗口电影)来代替控制元素并将其放置在视频之上。
8.为什么在别人的机器上播不出来,明明在我的机子上播放得好好的?
A:大多数是视频解码的原因,这需要安装必要的解码器。一个典型的例子可以看看莫比斯俱乐部关于Director视频编码解决方案:
 http://www.mobiusclub.com/support/display.asp?id=149
9.不出声,怎么回事?
A:先检查声卡,再看看是不是视频解码的原因。一般地,如果单独用 Windows Media Player可以正常播放的,在DMXtra中也可以正常播放。必要时可以试试以下方法,来解决:
    on startMovie
     the soundKeepDevice = 0
    end
在NT下确实会有声音独占的情况,可以参见Lingo词典2.0 疑难解答 -->为什么Windows NT在声音处理上有那么多的问题?
10.如果你对于相对路径的设置很没有把握,下面另有方法:

设置directmeida演员的ShowLocateFileDialog 属性为 0
Member("mpg1").ShowLocateFileDialog =0
*这是为了避免directmedia在找不到视频文件的情况下 弹出文件定位对话框。

之后在电影开始运行后,手动设置directmedia演员的file属性。如:
Member("mpg1").file=the moviepath&"Mpg\01.avi"
这样看似有点烦琐,尤其是电影中引用非常多视频的时候。但是你会发觉非常有效。而且效率不会低于普通方法。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}