主题:  关于图片缩放

alalala

职务:普通成员
等级:1
金币:2.0
发贴:64
#12003/7/16 19:06:31
只是想为多媒体在国内的发展尽一份力。以下是翻译director online 上的一篇关于图片缩放的文章,觉得简单有用,所以给大家共享。动机单纯。-------alalala

提问
我希望能将一张位图从640到800做一个平滑的变化。我试着让它在1到50帧变化,别的都还行,只是不够平滑。请告诉我秘诀。

回答
如果你确实希望让图片平滑的移动,大部分情况下最好的解决方法是用lingo代替在通道中的关键帧动画。最大的理由便是lingo允许你调整动画而不用增加和删除关键帧。

创建你的让图片变大的行为,第一步是初始化几个会决定图片显示的变量。

on beginsprite me

pzoomsteps=200
plargerect=(0,0,400,300)
psmallrect=(0,0,200,150)

end

当你的精灵开始的时候,它将初始化三个变量。第一个,pzoomsteps,将决定间隔的量。间隔越长,动画越平滑,同时动画时间也越长。你需要试验几次以找到适合你电影的值。另外的两个值是你图片的两个不同尺寸。

一旦你已经初始化了你的变量,接着你需要另一个程序来开始这个动画。这个程序可是被另一个按钮激发,或是帧语言,甚至是点击这个图片。

on startgrow me

pzoomcounter=0
tiemout("growimage").new(40,#growimage,me)

end

当startgrow命令执行的时候,它将把pzoomcounter设为0,并且创建一个新的timeout对象。这个新的timeout对象叫做growimage,从现在起它将每40毫秒执行一次growimage命令(或每秒25次)。growimage的命令看上去象这样:

on growimage me

pzoomcounter=pzoomcounter+1

temprect=(plargerect-psmallrect)
temppercent=float(pzoomcounter)/float(pzoomsteps)
temprect=(temprect*temppercent)+psmallrect

if pzoomcounter>=pzoomsteps then
timeout("growimage").forger()
end if

end


growimage命令从增加pzoomcounter1开始。它计算出来大尺寸和小尺寸的差,并将其存在一个变量里。接着用pzoomcounter变量和pzoomsteps变量计算当前的变化百分比。然后用这个百分比乘上以前计算出来的大图和小图的差。最后用这个值加上小图的rect,并把这个值赋予精灵。最终检查一下是否pzoomcounter等于或大于pzoomsteps,如果是的话便取消timeout对象,这样growimage命令也结束了。

如果你想将这个命令返过来用,那么命令大部分是相同的。(省略了几句)

on startshrink me
pzoomcounter=pzoomsteps
timeout("shrinkimage").new(40,#shrinkimage,me)

end

on shrinkimage me

pzoomcounter=pzoomcounter-1
temprect=(plargerect-psmallrect)
temppercent=float(pzoomcouner)/float(pzoomsteps)
temprect=(temprect*temppercent)+psmallrect
sprite(me.spritenum).rect=temprect
if pzoomcounter<=0 then
timeout("shrinkimage").forger()
end if

end



南山东篱摄螂

职务:普通成员
等级:4
金币:10.0
发贴:1840
#22003/7/16 21:46:45
好东西,谢谢分享!

给你加分

编辑历史:[这消息被东影默编辑过(编辑时间2003-07-16 21:47:29)]


alalala

职务:普通成员
等级:1
金币:2.0
发贴:64
#32003/7/16 22:02:21
多谢鼓励



眼睛小 脖子粗

职务:普通成员
等级:1
金币:0.0
发贴:4
#42009/1/7 11:14:53
好东西啊!!!!谢谢