上一篇 | 下一篇

“走马观花”--- 图片滚动效果

发布: 2007-1-25 13:45 | 作者: wjq | 来源: aougu.net | 查看: 468次

Director从8.0起在Lingo中增加了一系列图像操作的函数,其中copypixels就是个“神奇”的函数,使用它我们能做出很多很精彩的效果来,那么让我们首先来认识一下它吧!
c;M8O{B%W4[KjS 奥古多媒体0|uWDp+w(ptdL
函数定义如下:奥古多媒体E&x(?;@/B te

0mM0_ Old imageObject.copyPixels(sourceImageObject, destinationRect, sourceRect {, parameterList})
F8W W3Ls L+jS { imageObject.copyPixels(sourceImageObject, destinationQuad, sourceRect { , parameterList })奥古多媒体7x3yK2Ysj Alk
奥古多媒体6ul f8]9oJndI
参数说明:
,B*[1W@2{ s N R%ET
Qd}Y5s\ imageObject:目标图像对象;奥古多媒体8o^;oj }{
sourceImageObject:源图像对象;
Chk(r%jb$\ destinationRect,destionationQuad:目标矩形区域或四边形区域;
S[)|SKXZB sourceRect:源矩形区域;奥古多媒体? ~0F&O3sH^ V
parameterlist:可选的参数列表,用法很多,限于篇幅,不在此详解。有兴趣的朋友可以查看联机帮助。
N@,E5qFF 奥古多媒体$Cd2f/IP0z:Nh0a Lo
奥古多媒体T+i+OAY r
从上面可以看出,此函数的作用就是将源图像对象的指定矩形区域拷贝到目标图像对象的矩形区域或四边形区域(用四个点定义一个区域,当然当两点相同时,也可成为一个三角形)。区域都是相对于图像本身的,不是相对于舞台的,这一点千万不能混淆!
{;j!vE({;q)qSm-][P
V$Y6`#?[iu p&vV 好了,我想大家对copypixels的基本用法应该有了一个认识,下面我们主要使用这个函数来实现一个类似“走马灯”的效果,说简单点,“走马灯”的效果类似电视字幕的效果。实际上,设置图像的水平或垂直位置也可实现,但如果在舞台的局部区域表现则需要遮板,带来诸多便,本例很好地解决了这一问题。需要说明的是,为了增强视觉效果,我们还在图像两端加上了淡入淡出的渐变效果。
W/B#t+Nq
+` d}7[6t1t;Zz 一、准备工作
7BF3cA*vI'p*aHCM 奥古多媒体.EH9Kk9| a9F6I
为了计算上的方便及简化程序的设计,我们将要循环移动的图片首尾相接在一起并复制一份接在后面,将它命名为“source”,这个操作在paint窗口中很容易实现,当然也可借助其他图像处理软件完成。如图所示:奥古多媒体xGO.bg#N3?a
奥古多媒体m1N$s;Jk)e n*D
奥古多媒体n:owL2i u|/W

`)D{9b.Wf 假设我们要在舞台上显示的区域大小为210*76,首先在paint窗口中画一个填充矩形,打开菜单Modify->Transform Bitmap,弹出“Transform Bitmap”对话框(直接双击paint窗口左下角的颜色深度显示框也可弹出此对话框),将其尺寸调整为同舞台显示区域的大小210*76,将此演员命名为“display”,它就是我们的显示“橱窗”。然后再在cast窗口中“display”的下一位置画一个用作Mask的渐变填充图形(8位或32位),或者在photoshop中做好再导入也可以,尺寸与“display”相同,如图所示:
Us7FGP#uq2^ 奥古多媒体Q C#pr!y M9BruDxJ
奥古多媒体SA#pz4B
奥古多媒体 f0O3AD7R7ak\
将“display”拖到舞台上你想要的显示位置,按住Ctrl键,在精灵上单击鼠标左键,弹出墨水效果选择菜单,选择“mask”墨水效果,这样,“display”对应渐变图形黑色部分的位置将完全不透明,白色部分将完全透明,介于两者之间则呈现半透明状态。然后双击第一帧的脚本通道,输入如下代码:
!v6tTb7|4Y \ on exitframe me奥古多媒体LvT8P]H7l
   go the frame奥古多媒体yXm2S0A?FW
end
z/E-Ms,p(Y#Z+Ws
S%W-xO\'gg8q 当电影开始播放后,播放头会停在这一帧上。好了,准备工作完成!奥古多媒体/z;pC,i^y2j4i
奥古多媒体[ f7A |l+h%D#dH
二、编写行为代码奥古多媒体f1D4@J*I Q![

_h#z$R;]%B+B 本行为代码的基本思路就是把“source”图像动态地拷贝到“display”上,从头到尾循环进行。按“Ctrol+0”或单击工具栏上的“Script Window”按钮打开脚本代码写作窗口,注意在属性面板中将脚本类型设置为“behavior”,将此行为脚本命名为“dynamic copy”,输入如下代码:
cS E}{h 奥古多媒体4C!uzP.f;J FB iU
property mySprite --精灵实例,代表精灵本身
y.Y8D+ds1[Ehr property pnewRect1 --源区域矩形
Q{RUu property ptick --当前的 ticks 值
iCp.]#D#x#z property pWidth
3r?#VM.b `0qbW
f3`D5x%g c%b --用户参数接口,用来设置速度等
){6ar3x| W;oF7j property pInterval --滚动的时间间隔(单位:毫秒)
Ze-bd(j,w9A1BHC property pOffset --在间隔时间内的偏移量奥古多媒体5mt W6|X
property pSourceMember --源演员奥古多媒体w{g-WJS sT&o

AX2m2a y\`N on beginsprite me
(|i(`F7e,i Mr@j   mySprite=sprite(me.spritenum)
K+}!s NvtL*ah2y8R~   pnewRect1=mySprite.member.rect奥古多媒体 j)V h-BI6Wmb
  pWidth=pnewRect1.width
v+o7}^H:|   ptick=the milliseconds
)y)p9`nR7X8c!CD2d9H end奥古多媒体u/c0a(E_j-?

*n I6S_}G on prepareframe me奥古多媒体8k+Rh3\'u8l
  --如果鼠标移到滚动区域,暂停滚动奥古多媒体:Q:VM W{{R
  if the rollover=me.spritenum then exit
4F-k9~.s-w C(s,Y;lU%y$]   --如果没到间隔时间,不做操作
?g@5jGs!m@NNt   if the milliseconds-ptick<pInterval then exit
;GDE3H^|p   if pnewRect1.left>=pSourceMember.width/2 then
1|$Q1t*^n6L     pnewRect1=mySprite.member.rect奥古多媒体8D0wV'G*e)d-xIe
    temp=pWidth-pnewRect1.width
+Pe6DI,I-bX   end if
"DCoet   pnewRect1=pnewRect1.offset(pOffset,0)奥古多媒体pWiYlZTe)Jd
  mySprite.member.image.copypixels(pSourceMember.image,mysprite.member.rect,pnewRect1)奥古多媒体]r]I/zY
  ptick=the milliseconds奥古多媒体yVt.fb8yn%T
end奥古多媒体8YD6|*u-m0lS z
--用户参数列表接口奥古多媒体#O*L.h `9z.`
on getPropertyDescriptionList me奥古多媒体g/^m tl^
  if not the currentSpriteNum then exit奥古多媒体!nEEH.m)]KZ'z?
  pList=[:]奥古多媒体v-}8I-z4a;BH{{
 pList[#pSourceMember]=[ #comment: "Source member for offset", #format: #member, #default: ""]奥古多媒体*E5ne w6oPX&J2~
pList[#pInterval]=[ #comment: "Interval time (milliseconds)", #format: #integer, #default: 100]奥古多媒体qm DGqoxB
pList[#pOffset]=[ #comment: "offset per interval", #format: #integer, #default: 1]
7@rxX br m:j$IM|/F return pList
9D$IFb m0@Juv end getPropertyDescriptionList
&v$^!a-Aa*l 奥古多媒体X9ce C\hI?2r

G8Fb%?!@!K4U 三、应用奥古多媒体N)XjD].OshK

;`*UU1ICQ 将此行为从cast窗口中拖到“display”的精灵(或者在Scroe窗口中的精灵)上,则会自动弹出参数设置对话框,设置第一个参数为“source”,第二个和第三个参数值分别为10和2。如图所示:
,P(_ xg b ZM$?*N 奥古多媒体*z*b*qS%bu

d.ij `O&L7~h5u
D!FDf"pNAt 保存文件,按下播放按钮,即可看到实际效果。如图所示(舞台背景色设为紫色):奥古多媒体!]DT:r-U3e
奥古多媒体 I)LFb9t"S
奥古多媒体l^3J-[8A Iv*l0YS#yR
奥古多媒体sx/y)y/Pv.\
四、后记奥古多媒体3@hZR8_ n5rO#d'V E
奥古多媒体 l*U7~NF*dDmzi
滚动的速率不可能高于帧速,所以在可能的情况下应尽量调高帧速,这样可以得到更为平滑的滚动效果。如果你有兴趣可以加入垂直的效果,提供参数以供选择就更完美了。当然还可稍加改动应用于单行文本,做出电视字幕的效果来。怎么样?快试试吧!
Qw Z pA)Cc;O 奥古多媒体 u;Rm!\n)vU9U5r#Z
下载例子

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


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