选择显示字体大小

shockwave 预载技术(3)

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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons