发布: 2007-9-11 14:01?|? 作者: webmaster?|? 来源: 本站原创?|? 查看: 30次
二部分:进度条组件
在上一部分,我们创建了一个“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,myBufferRect) end
on mShowWorking (me) -- 复制缓冲 buffer = myBuffer.duplicate() -- 绘制边界 buffer.draw(myBufferRect,#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,myBufferRect) end
on getPropertyDescriptionList (me) pdList = [:] pdList[#myColour] = [#Comment: "Bar Colour",#Format: #Color,#Default: rgb(68,68,68)] pdList[#myColour2] = [#Comment: "Stripe Colour ",#Default: rgb(255,255,255)] return pdList end 这个简单的进度条行为本身唯一的作用只是对mShowWorking和mShowProgress消息做出响应,而当beginSprite事件发生时,它又会发出一个mRegisterWidget消息,这样做的目的是让别的对象能够获得对其的引用(作为参数和mRegisterWidget消息同时被发送的“me”引用)。这些对象需要此引用以便进行反馈工作,当然,也可以使用sendSprite和sendAllSprite命令实现这一点。 |
|
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|