上一篇 | 下一篇

与Mui Dialog Xtra一起使用Imaging Lingo(上)

发布: 2007-1-25 16:21 | 作者: Robert Wingate | 来源: 译自director-online.com | 查看: 178次

  原著:Robert Wingate
e czq0pgCE1P3h   翻译:alphachi奥古多媒体JL7D*e.L$]CA&O

9H*|0G;QG `{   如果不是一个Director新手,就肯定听说过Imaging Lingo。使用这套随Director 8.0添加的全新Lingo命令,能够对影片中图形进行像素级控制,例如运行时创建、填充与合成图像。虽然使用CastEffects、DrawXtra或Composite Xtras也可以达到同样的效果,但由于Imaging Lingo是Director本身内置的功能,所以在许多方面拥有不可比拟的优势。
a0K%P(}o(wvq"y
?ZRo!g5y:fL   本文主要演示了一项在Mui对话框的callback处理程序中使用Imaging Lingo的技巧。你将学会如何根据对话框的设置即时将几个图形元素合为一个,然后利用Mui Xtra的ItemUpdate在运行时更新对话框中的图形。关于如何使用Mui Xtra创建对话框,参考这里
:P*Y-|.e D@u'X 奥古多媒体1z7}i.t,Eu } E M
奥古多媒体"~ w!V sLg3DS)H
奥古多媒体$Z#jr"d'~;{
  首先操作一下样本影片,注意复选框或单选按钮被点击后图形的变化,并确保在演员表里有多个图形供合成使用。实际上,通过将下面看到的六个单独的图形元素添加到一个空的面板图形上,这个对话框能够产生128种可能的合成效果。
7mFUK'i 奥古多媒体M3Y$n_9[M.rN3J

M/b+`$k"n x
这个程序里使用了七个演员

8kzJ3jR!?Ce e 奥古多媒体qWu(t3k^c9Z
  这便是Imaging Lingo的强大之处——运行时合成图像。下面让我们看看具体是怎么做的。
f2_7^ dIr;{
O-~ DO r q]&N|I   一、在屏幕上获取对话框奥古多媒体"l$O6},Gn"R6S
奥古多媒体$rP:a"h |E0b we
  首先使用Mui Xtra根据下面的步骤建立一个对话框:奥古多媒体-XNK q7L+k!r
  1) 创建一个此Xtra的实例奥古多媒体-q!k!u`0t _,?ch2| Gp
  2) 配置对话框的整体属性
U}`9x!v)`7p   3) 配置每个元素的局部属性
(_0CH6UT g4Y$eFe   4) 显示对话框奥古多媒体irZv$U$s.c M

E[G^P*q9m   1. 什么是Mui Callback处理程序
uG,_E9g.]h
H7ua/[Q ~5zx1K   Mui callback处理程序类似一个自编处理程序,只是无法从代码中直接调用。但只需传递callback处理程序的名称,Mui便会对其进行适时的调用。
o7u3CH^
8ie;RlT5jk,}1j*u7eg   当需要Mui Xtra显示对话框时,它便准备将事件传递给callback处理程序,两者专门设计用来处理对话框中发生的用户交互。也就是说,无论何时用户输入了文本,拖动了滑块,点击了复选框或者以其他任何方式同对话框发生了交互,此Xtra都会如实告诉处理程序发生了什么,而处理程序则以相应的方式作出响应。callback处理程序和对话框息息相关,两者互相协作,合成并更新图像。
Gq'N wiVdY 奥古多媒体/f8B of)eja
  当对话框处于可见状态时,此Xtra会注意每一个用户交互,并将三部分数据发送到callback处理程序:奥古多媒体$a0D _U3o-I_F T%N!R
  1) 用户事件的类型(一个符号型数据)奥古多媒体AA*k Jz{
  2) 在#windowItemList中的窗口组件位置(一个整型数据)
,t6x;v.v[#Aw&AL   3) 窗口组件当前的属性(一个属性列表)奥古多媒体{q,|6L;{})z

$[ Jb7c+B   这个callback处理程序主要由case语句构成,以便区分不同的用户交互,检查项目属性以确定当前的窗口组件,最后决定对当前的窗口组件作出怎样的改变。为了说明如何使用callback处理程序筛选用户事件,请看下面的例子:奥古多媒体%qk2ND+Y

)[m Y5F!L on MyDialogCallback (event, eventData, itemPropList)
}/]"}y7\   case (event) of奥古多媒体2xY0U {1|bm#I
    #itemChanged:
$[X+V3t~nu -- 用户已经使对话框作了一些改变,使用itemPropList.type检查具体的改变情况
A2AK1o0l8OW _V0j2y       put itemPropList
P3KS:p ?i}     #itemclicked:
|u#S L4_ o&s -- 用户在对话框中点击了一个按钮,使用itemPropList.type寻找这个按钮
NMZ3N J{,C+~NS       put itemPropList奥古多媒体T%_'G7bj
    end case奥古多媒体b7Fv;xr9[8Z:F
end
z_`vz:u!W
奥古多媒体nUluH1y
  与在Message窗口中输入当前窗口组件属性相比,上面的代码不会有更大的用途,但它演示了itemPropList的使用。样本影片中的itemPropList会被发送到MyDialogCallback处理程序,因为当你点击了“Show Title”复选框后,将会产生下面的列表:奥古多媒体"n%Ch#ha
  -- [#value:1, #type:#checkBox, #attributes:[], #title:"Show Title", #tip:"tip", #locH:5, #locV:56, #width:132, #height:12, #enabled:1]
;Bgh cD~4u3w
mDS Tg1d\#{c,|wO5}   从上表中能够很容易的确定:
7Q(\%HQth#b_O*^   1) 用户点击了一个复选框(#type属性)
s+FxhT#u0~-g"h(`   2) 这个复选框是“Show Title”(#title属性)奥古多媒体M0D+nAv}&NjP
  3) 这个复选框新的状态是“已选中”(#value属性)奥古多媒体WVlE*}3|,D
奥古多媒体7d/[#goh.A
  2. 使用callback处理程序
9?6y4zp'R7PaT T
hK9`,{a9N#|2e   现在已经确定发生了何种交互(用户选中了复选框“Show Title”),下面来看看MyDialogCallback处理程序是如何响应的。奥古多媒体V%O8@D`&K8uk(mu6xLs
奥古多媒体/Wmb|+Zk8P6Rb8B
global lsWidgetStates 奥古多媒体(o8LK8?0V&{l ]9gy?
on MyDialogCallback (event, eventData, itemPropList)
5y.X ^8c o+vYZdf   case (event) of奥古多媒体"m"hp3bGA%f8R7V@/}
    #itemChanged:奥古多媒体C c2o@+LT$Z
       case (itemPropList.type) of
g7C M&tNS)`E         #checkBox:
%P x7t)wy -- 用户点击了一个复选框,通过itemPropList.title来判断具体是哪一个 奥古多媒体.RH#Jdk-GR0q*G)^3a
          case (itemPropList.title) of
TKk-L+?DH             "Show Title" : lsWidgetStates.title = itemPropList.value
8|AF5d5k,s             "Show Author": lsWidgetStates.author = itemPropList.value
R P)f z [1YIiPw           end case奥古多媒体 }A0qFO^%N,mup
        end case
%U%Dvb"ti(Ul5E@XO0L   end case
q9p*gD6? I5i9mh\ end
T-H1{H4Vd L z7z!nw
奥古多媒体4{S:kf+n$S8} [V{
  其中名为lsWidgetStates的全局列表用来存储每个窗口组件的当前取值,根据这些值决定怎样合成图形。这个列表看起来像这样:奥古多媒体Qvv]&he'K
  lsWidgetStates = [#publisher: 0, #title: 0, #description: 0, #author: 0, #pageCurl: 0, #graphic: 0, #color: "White Background"]
-n*C|Y)fWI 奥古多媒体`eJ[P(K${*o
  下图显示了复选框被点击后究竟发生了什么:奥古多媒体?#C8P8Q^D ^r.r

~-cA'c+vD#?r\;|

G @"A{2}`.J/VQ0^
注意callback处理程序的执行过程

@-V N@i3`uUK
avv~?F#` N   每次点击了复选框或单选按钮后,MyDialogCallback都会调用UpdateDialogImage处理程序,利用lsWidgetStates确定哪些图形元素需要被合成到最终显示的图形上。奥古多媒体{ n8h{5Xwj@M]*D

DTx0_)C3M9v   UpdateDialogImage的作用在于:奥古多媒体q!as;H? jZ/j
  1) 建一个新的空白面板图像奥古多媒体NB9t*W%U.S k x&~
  2) 根据lsWidgetStates的取值给背景上色
)n*Y1o$[/\,\T   3) 根据lsWidgetStates的取值合成复选框选中的图形奥古多媒体dWeT])k[
  4) 使用Mui的ItemUpdate将合成后的图像发送给对话框

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


最新歌曲
转机 放生 黄玫瑰 摇啊摇 那滋味 擦肩而过 你若成风 幸福一辈子 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 爱情小偷 只要不亏 一定要爱你 等爱的玫瑰 无情的温柔 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 下雨天 我可以 樱花草 为你写诗 独家记忆 再见小时候 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 孤独的时候可以抱你
假如 城府 是非题 有缘人 舍不得 我的答铃 只欠秋天 外滩十八号 越爱越难过 123木头人 爱走了心碎了 爱上你是我的错 爱情里没有谁对谁错