Quick-cocos2d-x3.3 Study (十八)--------- 进度条
进度条
在ctor()函数中添加如下代码
1 -- 添加进度条 2 -- 添加血量属性 self.blood,这里初始值我设为了 100, 3 -- 这样我们后面就可以根据血量来设置进度条的百分比了(懒人做法)。 4 self.blood = 100 5 -- 给进度条创建一个底,也就是在进度条的下面放一个背景, 6 -- 这样当进度条逐渐变短时,用户可以更直观的看到它减少了多少。 7 local progressbg = display.newSprite( "image/progress/load.png" ) 8 -- :addTo(self) 9 -- 创建进度条 self.fill 10 self.fill = display.newProgressTimer( "image/progress/loadBar.png", display.PROGRESS_TIMER_BAR ) -- 3 11 -- 设置进度条的起始点, 12 -- (0,y)表示最左边, 13 -- (1,y)表示最右边, 14 -- (x,1)表示最上面, 15 -- (x,0)表示最下面。 16 self.fill:setMidpoint( cc.p( 0, 0.5 ) ) 17 -- 设置进度条变化方向,如果不用变化的方向,则设置该方向为0,否则设置为1。 18 -- 所以(1,0)表示横方向,(0,1)表示纵方向。 19 self.fill:setBarChangeRate( cc.p( 1.0, 0 ) ) 20 -- 把进度条的位置设置在 progressbg 上,并将进度条添加到 progressbg 上 21 self.fill:setPosition( progressbg:getContentSize().width / 2, progressbg:getContentSize().height / 2 ) 22 progressbg:addChild( self.fill ) 23 -- 调用 ProgressTimer 的 setPercentage 方法设置进度条的百分比为 100%(因为 self.blood 的值为100)。 24 -- ProgressTimer 类有一个很最要的percentage属性。 25 -- 它代表当前进度条的进度值。 26 -- 其中 setPercentage 方法能设置 ProgressTimer 的 percentage 值。 27 self.fill:setPercentage( self.blood ) 28 29 -- 设置进度条的锚点 30 -- progressbg:setAnchorPoint( cc.p( 0, 1 ) ) 31 -- 将进度条添加到场景中 32 self:addChild( progressbg ) 33 -- 设置进度条的位置 34 progressbg:setPosition( cc.p( display.cx, display.cy + 50 ) ) 35 36 -- 调用帧事件 37 self:addNodeEventListener( cc.NODE_ENTER_FRAME_EVENT, handler( self, self.update ) ) 38 self:scheduleUpdate() 39 40 41 42 43 -- 设置进度条百分比的 44 function GameScene:setProPercentage( Percentage ) 45 -- 设置进度条的百分比 46 self.fill:setPercentage( Percentage ) 47 end 48 49 -- 进度条的帧调用回调函数 50 function GameScene:update( dt ) 51 -- body 52 -- 每帧都让血量减少0.2 53 self.blood = self.blood - 0.2 54 -- 输出血量值,(方便观看update的执行和血量值) 55 print( "---- self.blood = ----", self.blood ) 56 -- 如果血量值小于0 的话就停止减少,否则就执行动画 57 if self.blood <= 0 then 58 --todo 59 self:unscheduleUpdate() 60 else 61 self:setProPercentage( self.blood ) 62 end 63 64 end
效果图:
其实这里的背景也是动的
但是我在ctor中调用了两次scheduleUpdate()
所以背景的那个就不动了(本人猜测只调用了最后一个)
为了达到大家一起动起来
就把update的调用添加到scrollBackground函数中吧
首先注释掉这些代码:
1 -- -- 调用帧事件
2 -- self:addNodeEventListener( cc.NODE_ENTER_FRAME_EVENT, handler( self, self.update ) )
3 -- self:scheduleUpdate()
然后在scrollBackground函数的最末尾添加
self:update( dt )
然后就可以看到我们想要的效果啦:
当进度条没有的时候我们看到背景也跟着停止运动了
因为我们掉用了 unscheduleUpdate()函数
效果图: