函数定义如下:
imageObject.copyPixels(sourceImageObject, destinationRect, sourceRect {, parameterList})
imageObject.copyPixels(sourceImageObject, destinationQuad, sourceRect { , parameterList })
参数说明:
imageObject:目标图像对象;
sourceImageObject:源图像对象;
destinationRect,destionationQuad:目标矩形区域或四边形区域;
sourceRect:源矩形区域;
parameterlist:可选的参数列表,用法很多,限于篇幅,不在此详解。有兴趣的朋友可以查看联机帮助。
从上面可以看出,此函数的作用就是将源图像对象的指定矩形区域拷贝到目标图像对象的矩形区域或四边形区域(用四个点定义一个区域,当然当两点相同时,也可成为一个三角形)。区域都是相对于图像本身的,不是相对于舞台的,这一点千万不能混淆!
好了,我想大家对copypixels的基本用法应该有了一个认识,下面我们主要使用这个函数来实现一个类似“走马灯”的效果,说简单点,“走马灯”的效果类似电视字幕的效果。实际上,设置图像的水平或垂直位置也可实现,但如果在舞台的局部区域表现则需要遮板,带来诸多便,本例很好地解决了这一问题。需要说明的是,为了增强视觉效果,我们还在图像两端加上了淡入淡出的渐变效果。
一、准备工作
为了计算上的方便及简化程序的设计,我们将要循环移动的图片首尾相接在一起并复制一份接在后面,将它命名为“source”,这个操作在paint窗口中很容易实现,当然也可借助其他图像处理软件完成。如图所示:

假设我们要在舞台上显示的区域大小为210*76,首先在paint窗口中画一个填充矩形,打开菜单Modify->Transform Bitmap,弹出“Transform Bitmap”对话框(直接双击paint窗口左下角的颜色深度显示框也可弹出此对话框),将其尺寸调整为同舞台显示区域的大小210*76,将此演员命名为“display”,它就是我们的显示“橱窗”。然后再在cast窗口中“display”的下一位置画一个用作Mask的渐变填充图形(8位或32位),或者在photoshop中做好再导入也可以,尺寸与“display”相同,如图所示:
将“display”拖到舞台上你想要的显示位置,按住Ctrl键,在精灵上单击鼠标左键,弹出墨水效果选择菜单,选择“mask”墨水效果,这样,“display”对应渐变图形黑色部分的位置将完全不透明,白色部分将完全透明,介于两者之间则呈现半透明状态。然后双击第一帧的脚本通道,输入如下代码:
on exitframe me
go the frame
end
当电影开始播放后,播放头会停在这一帧上。好了,准备工作完成!
二、编写行为代码
本行为代码的基本思路就是把“source”图像动态地拷贝到“display”上,从头到尾循环进行。按“Ctrol+0”或单击工具栏上的“Script Window”按钮打开脚本代码写作窗口,注意在属性面板中将脚本类型设置为“behavior”,将此行为脚本命名为“dynamic copy”,输入如下代码:
property mySprite --精灵实例,代表精灵本身
property pnewRect1 --源区域矩形
property ptick --当前的 ticks 值
property pWidth
--用户参数接口,用来设置速度等
property pInterval --滚动的时间间隔(单位:毫秒)
property pOffset --在间隔时间内的偏移量
property pSourceMember --源演员
on beginsprite me
mySprite=sprite(me.spritenum)
pnewRect1=mySprite.member.rect
pWidth=pnewRect1.width
ptick=the milliseconds
end
on prepareframe me
--如果鼠标移到滚动区域,暂停滚动
if the rollover=me.spritenum then exit
--如果没到间隔时间,不做操作
if the milliseconds-ptick<pInterval then exit
if pnewRect1.left>=pSourceMember.width/2 then
pnewRect1=mySprite.member.rect
temp=pWidth-pnewRect1.width
end if
pnewRect1=pnewRect1.offset(pOffset,0)
mySprite.member.image.copypixels(pSourceMember.image,mysprite.member.rect,pnewRect1)
ptick=the milliseconds
end
--用户参数列表接口
on getPropertyDescriptionList me
if not the currentSpriteNum then exit
pList=[:]
pList[#pSourceMember]=[ #comment: "Source member for offset", #format: #member, #default: ""]
pList[#pInterval]=[ #comment: "Interval time (milliseconds)", #format: #integer, #default: 100]
pList[#pOffset]=[ #comment: "offset per interval", #format: #integer, #default: 1]
return pList
end getPropertyDescriptionList
三、应用
将此行为从cast窗口中拖到“display”的精灵(或者在Scroe窗口中的精灵)上,则会自动弹出参数设置对话框,设置第一个参数为“source”,第二个和第三个参数值分别为10和2。如图所示:
