上一篇 | 下一篇

定制能够随意拖动的MIAW

发布: 2007-1-25 16:37 | 作者: Paul Hemmer | 来源: 译自director-online.com | 查看: 181次

  原著:Paul Hemmer
nRI Br {N q   翻译:alphachi
\(x#ueEs T
~YEN6j \Bx   我们经常想要创建一个具有以下属性的MIAW(Movie In A Window,窗口中的影片):奥古多媒体7q9J.?@'sR J*|

o9S H/l3['Qa~   1. 没有标准的标题栏。
'ys U:u_6p Ku4|
] I:[W"GP)sq   2. 在以窗口模式运行的放映机中,能够被用户在舞台范围内外自由拖动。
$Jg:? rK
.y-i/w8N5T)f_   看起来好像很容易,可是许多开发者发现,即使给windowType指定了有效值,最终的MIAW仍然带有标题栏,且仅能在舞台范围内拖动,或者虽然没有标题栏,但位于舞台范围内,且根本无法拖动。作为一个Director开发者,你也许根本不需要这些功能(因此也不需要知道windowType究竟该如何取值),你也许一直苦于无法算出给windowType赋予何值才能够得到满意的结果。本文阐述的技巧很好地解决了这一问题,将其用在Director程序中非常容易。此外,这项技巧已经通过测试,在MAC和PC上都能够工作的很好。
6O8Va&i@ M-k 奥古多媒体X(jHP*X EuZ!x _
  做法很简单,只需两步:奥古多媒体U}P K6O&J7m.gy_
奥古多媒体x3Vs1o1i6[nx
  1. 选择合适的windowType值,此处必须令windowType=2。奥古多媒体`z*F6I%Q:fo4i
奥古多媒体t;T nL5T
  2. 给一个“伪造”的标题栏添加Lingo代码,以便鼠标能够随意拖动这个MIAW。奥古多媒体 OK7e7?W

Uj2A2m8P   为什么在这个MIAW中,必须令windowType=2呢?简单地说,是因为一个取值为2的“窗口”实际上根本就不是窗口,而是一个对话框。真正的窗口(windowType取其他的有效值)必须在当前舞台环境的父窗口边界内,这不是Director的特性,这是所有视窗操作系统的一个基本概念。通过令windowType=2,实际上创建了一个“对话框中的影片”,而对话框能够存在于桌面上的任何地方,且与创建它的主窗口的大小和位置都没有关系。因此只要能够在预期的位置用Lingo在一个对话框(windowType=2)中打开影片,那么随后就可以在运行时用Lingo改变它的位置。
%u"D_7_+_e K 奥古多媒体Qi8[ q3uk+qG:s
  首先,在MIAW的“热点”上添加相应的Lingo代码,以便当鼠标按下时跟踪其位置,并相应地调整窗口(实际上是对话框)的rect值。奥古多媒体3C b0g/OK5h2a
奥古多媒体[Q[#v}+\
  将下面的代码粘贴到Script Window中,并确保将其设置成Movie Script。奥古多媒体P.x7vEv

5?e{w0OP t4\ on DragWindow dWhichMIAW
X Mtl+[ h!}"@M N:\   tell the stage
:]%z7S-Ed_!BE     set mPt to point(the mouseH,the mouseV)奥古多媒体gQb2D"T
    set origRect to the rect of dWhichMIAW
x8Oh v4OZ'^+tDt}({ K     repeat while the mouseDown
RR y.N7iK{       set newPt to point(the mouseH, the mouseV)奥古多媒体 T!a.? N,^*?6E)ge
      set deltaPt to newPt - mPt奥古多媒体&U!K^8V{$_9f_#b/C(w
      set newRect to offset(origRect,getAt(deltaPt,1), ?奥古多媒体)j_Q z5` eFV-IH
      getAt(deltaPt,2))
Y1oBkr       set the rect of dWhichMIAW to newRect奥古多媒体9d3h1g"Ug#d-v0T
      tell dWhichMIAW to updateStage奥古多媒体 d:L{*}B+K,G3x
      updateStage
?&@`)a*I;q     end repeat
%H W1E[0f:b;E.k-}-X   end tell奥古多媒体k%R6Ap(ZU%xo
end奥古多媒体|@4s&Q s

)s'T)^@*H0kp_   正如你看到的那样,这个带有参数(dWhichMIAW)的剧本被MIAW引用,同时根据传递的参数值运行。可是从哪里调用剧本呢?很简单,你的MIAW看起来可能像下图那样,注意我是如何使用一个Director中的Shape演员来“伪造”标题栏的。
h:eP%z2E+xzV4P 奥古多媒体8e;C!dP:h|Eo6z

:y QJq)E
_ki|*| v3h1T   其次,将下面的剧本放在“伪造”的标题栏上。
I`iM&h 奥古多媒体 Y/c.b.O6sd f
global gVideoPlayer
%] c1j(DlVX ^5g L - the global reference to your MIAW奥古多媒体B0g/Wk a0sS8S'c!N x

G8~ {N8V \ u on mouseDown
OHwbSTqb   repeat while the mouseDown奥古多媒体6i\;Zg["aTkw#G:Q
    tell the stage to DragWindow(gVideoPlayer)奥古多媒体&C4~t-l7g{|)q1g
  end repeat奥古多媒体Odx hGzT;PQ
end奥古多媒体7xy y|c"T

(r#}1{J5k   这就是要做的一切。当你打开这个MIAW时,没有标题栏,点击“伪造的标题栏”能够在屏幕上任意拖动MIAW而不受舞台尺寸和边界的限制。奥古多媒体'r7Ge8y-V

3}0OYsS _   虽然这项技巧很简单,但在Director开发中,确实为定制能够随意拖动的影片打开了创造性的大门。

字号: | 推荐给好友

 

评分:0

我来说两句

seccode