shockwave 预载技术
原著:lingoworkshop
翻译:alphachi
第二部分:进度条组件
在上一部分,我们创建了一个“preloader”父代剧本用来:(1)预载一个url;(2)当预载完成时发送一个消息;(3)预载进行时发送“状况”消息。在这一部分,我们将创建一个可以显示当前状况(例如预载完成的百分比)的进度条。
创建进度条有很多种方法。我们可以使用flash角色、可拉伸的图形角色、普通的文本角色以及像os controls这样的xtras提供的相关组件等,不过在这里,我们选择了imaging lingo。无论使用何种方法,剧本自身都应该能够对下列消息做出响应:(a)等待连接到服务器时发送的mshowworking消息;(b)知道预载已经完成多少时发送的mshowprogress消息(是一个数值)。
当我们将mshowworking消息发送给下面的剧本时,一个简单的动画将被绘制到舞台上。当我们发送mshowprogress消息时,这个动画将被一个简单的进度条替换。
simple progress bar (v.1)
-- 声明属性变量
property mycolour, mycolour2
property mycanvas, myscreenrect, mybuffer, mybufferrect
property mystep, mysegmentsize
on beginsprite me
thissprite = sprite ( me . spritenum )
-- 确定绘制范围
myscreenrect = thissprite. rect
-- 对输出图像进行引用
mycanvas = ( the stage ). image
-- 创建图像缓冲
mybuffer = image (myscreenrect. width , myscreenrect. height , 24 )
mybuffer. copypixels (mycanvas, mybuffer. rect , myscreenrect)
-- 存储rect以便稍后使用
mybufferrect = mybuffer. rect
-- 建立动画运行参数
mystep = 0
mysegmentsize = mybuffer. height - 4
-- 控制其他的角色
sendallsprites ( # mregisterwidget, me , # progressbar)
end
on mshowprogress ( me , amt)
-- 确保amt在0和1.0之间
amt = min ( 1 . 0 , max ( 0 , amt))
-- 复制缓冲
buffer = mybuffer. duplicate ()
-- 绘制边界
buffer. draw (mybufferrect, [ # shapetype: #rect , # color: mycolour])
-- 计算基于显示数量的填充rect
progressbarrect = rect ( 2 , 2 , (mybufferrect. width - 2 )*amt, mybufferrect. height - 2 )
-- 填充进度条rect
buffer. fill (progressbarrect, mycolour)
-- 将运行结果复制到舞台上
mycanvas. copypixels (buffer, myscreenrect, mybufferrect)
end
on mshowworking ( me )
-- 复制缓冲
buffer = mybuffer. duplicate ()
-- 绘制边界
buffer. draw (mybufferrect, [ # shapetype: #rect , # color: mycolour])
-- 给属性变量mystep加1,以便单独移动stripes
mystep = mystep + 1
-- 如果绘制部分过大则进行重设
if mystep > 0 then mystep = -mysegmentsize
-- 创建临时图像
innerrect = buffer. rect . inflate (- 2 ,- 2 )
innerimage = image (innerrect. width , innerrect. height , 24 )
innerimage. fill (innerimage. rect , mycolour)
-- 绘制stripes
l = mystep
repeat while true
drect = rect (l, 0 , l + mysegmentsize, mysegmentsize+ 2 )
innerimage. draw ( point (l, 0 ), point ( l + mysegmentsize, mysegmentsize), [ # shapetype: #line , # linesize: 1 , # color: mycolour2, # ink: 2 ])
l = l + mysegmentsize
if l > buffer. width then exit repeat
end repeat
-- 向缓冲中添加内容
buffer. copypixels (innerimage, innerrect, innerimage. rect )
-- 将运行结果复制到舞台上
mycanvas. copypixels (buffer, myscreenrect, mybufferrect)
end
on getpropertydescriptionlist ( me )
pdlist = [:]
pdlist[ # mycolour] = [ # comment: "bar colour" , # format: #color , # default: rgb ( 68 , 68 , 68 )]
pdlist[ # mycolour2] = [ # comment: "stripe colour " , # format: #color , # default: rgb ( 255 , 255 , 255 )]
return pdlist
end
这个简单的进度条行为本身唯一的作用只是对mshowworking和mshowprogress消息做出响应,而当beginsprite事件发生时,它又会发出一个mregisterwidget消息,这样做的目的是让别的对象能够获得对其的引用(作为参数和mregisterwidget消息同时被发送的“me”引用)。这些对象需要此引用以便进行反馈工作,当然,也可以使用sendsprite和sendallsprite命令实现这一点。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器