CCProgressTimer 进度条动画在cocos2dx+lua中的使用

CCProgressTimer 进度条动画源代码分析红孩儿博客http://blog.csdn.net/honghaier/article/details/8281884

实现一个填充爱心的效果功能。http://blog.csdn.net/hitwhylz/article/details/21732213

http://www.cnblogs.com/GameDeveloper/p/3578584.html

lua_binding绑定的函数:

tolua_constant(tolua_S,"kCCProgressTimerTypeRadial",kCCProgressTimerTypeRadial);
  tolua_constant(tolua_S,"kCCProgressTimerTypeBar",kCCProgressTimerTypeBar);
  tolua_cclass(tolua_S,"CCProgressTimer","CCProgressTimer","CCNode",NULL);
  tolua_beginmodule(tolua_S,"CCProgressTimer");
   tolua_function(tolua_S,"getType",tolua_Cocos2d_CCProgressTimer_getType00);
   tolua_function(tolua_S,"getPercentage",tolua_Cocos2d_CCProgressTimer_getPercentage00);
   tolua_function(tolua_S,"getSprite",tolua_Cocos2d_CCProgressTimer_getSprite00);
   tolua_function(tolua_S,"setPercentage",tolua_Cocos2d_CCProgressTimer_setPercentage00);
   tolua_function(tolua_S,"setSprite",tolua_Cocos2d_CCProgressTimer_setSprite00);
   tolua_function(tolua_S,"setType",tolua_Cocos2d_CCProgressTimer_setType00);
   tolua_function(tolua_S,"setReverseProgress",tolua_Cocos2d_CCProgressTimer_setReverseProgress00);
   tolua_function(tolua_S,"setAnchorPoint",tolua_Cocos2d_CCProgressTimer_setAnchorPoint00);
   tolua_function(tolua_S,"setColor",tolua_Cocos2d_CCProgressTimer_setColor00);
   tolua_function(tolua_S,"getColor",tolua_Cocos2d_CCProgressTimer_getColor00);
   tolua_function(tolua_S,"getOpacity",tolua_Cocos2d_CCProgressTimer_getOpacity00);
   tolua_function(tolua_S,"setOpacity",tolua_Cocos2d_CCProgressTimer_setOpacity00);
   tolua_function(tolua_S,"setOpacityModifyRGB",tolua_Cocos2d_CCProgressTimer_setOpacityModifyRGB00);
   tolua_function(tolua_S,"isOpacityModifyRGB",tolua_Cocos2d_CCProgressTimer_isOpacityModifyRGB00);
   tolua_function(tolua_S,"create",tolua_Cocos2d_CCProgressTimer_create00);
   tolua_function(tolua_S,"getMidpoint",tolua_Cocos2d_CCProgressTimer_getMidpoint00);
   tolua_function(tolua_S,"setMidpoint",tolua_Cocos2d_CCProgressTimer_setMidpoint00);
   tolua_function(tolua_S,"getBarChangeRate",tolua_Cocos2d_CCProgressTimer_getBarChangeRate00);
   tolua_function(tolua_S,"setBarChangeRate",tolua_Cocos2d_CCProgressTimer_setBarChangeRate00);
   tolua_function(tolua_S,"isReverseDirection",tolua_Cocos2d_CCProgressTimer_isReverseDirection00);
   tolua_function(tolua_S,"setReverseDirection",tolua_Cocos2d_CCProgressTimer_setReverseDirection00);
  tolua_endmodule(tolua_S);



游戏中血条,法力条,怒气条的创建

 

 --s_progress:进度条功能名字
    --l_name:放置进度条的层的名字
    local function create_progress( s_progress, l_name )
        --根据进度条名字取得进度条底的图片
        local sProgress = tolua.cast( self.proxy:getNode('s_progress_'..s_progress), "CCSprite" )
        sProgress:retain()
        sProgress:removeFromParentAndCleanup( false )
        --调用create工厂方法创建一个进度条实例
        local progress = CCProgressTimer:create( sProgress )
        sProgress:release()
        
        --取得放置进度条底的层
        local placeholder = tolua.cast( self.proxy:getNode('lay_progress_'..l_name), 'CCLayer')
        
        progress.x = placeholder.x
        progress.y = placeholder.y
        --设置条形
        progress:setType(kCCProgressTimerTypeBar)
        --设置中点,这里是一个称为“中点”的成员变量值,但它的意义绝不是这么简单,
        --如果是绕中心旋转的进度动画,它就是中心,如果是条形动画,它代表了UV随进度变化的起始位置,如果是在最左边,其值为(0,y),
        --如果是在最右边,其值为(1,y),如果在最上面(x,0),如果在最下面(x,1);如果是在中心(0.5,0.5)。
        progress:setMidpoint(ccp(0,1))
        --是一个表示动画方向的成员变量值,如果是横向方向,则设为(1,0),如果是纵向方向,则设为(0,1);
        progress:setBarChangeRate(ccp(1,0))
        --初始进度为0
        progress:setPercentage(0)
        
        --取得放置整个进度条的层
        self['lay_'..l_name] = tolua.cast( self.proxy:getNode('lay_'..l_name), 'CCLayer')
        --将进度条添加到该层上
        self['lay_'..l_name]:addChild( progress )
        --设置key = progress_'..l_name 方便取值
        self['progress_'..l_name]=progress
    end
    --创建血条
    create_progress( 'hp', 'hp' )
    --创建法力条
    create_progress( 'mp', 'mp' )
    
    --如果怒气最大4格
    if p.max_ap == 4 then
        --取得怒气条
        local s_invalid = tolua.cast( self.proxy:getNode('s_progress_ap'), "CCSprite" )
        s_invalid:removeFromParentAndCleanup( false )
        --取得怒气条底
        s_invalid = tolua.cast( self.proxy:getNode('s_back_ap'), "CCSprite" )
        s_invalid:removeFromParentAndCleanup( false )
        create_progress( 'ap2', 'ap' )
        --5格怒气条
    elseif p.max_ap == 5
        or not p.max_ap then
        local s_invalid = tolua.cast( self.proxy:getNode('s_progress_ap2'), "CCSprite" )
        s_invalid:removeFromParentAndCleanup( false )
        s_invalid = tolua.cast( self.proxy:getNode('s_back_ap2'), "CCSprite" )
        s_invalid:removeFromParentAndCleanup( false )
        create_progress( 'ap', 'ap' )
    else
        assert(false)
    end
    --怒气条进度,在相邻两格之间竖向表示
    self.ap_mask = tolua.cast( self.proxy:getNode('s_mask_ap'), "CCSprite" )
    self.ap_mask:getParent():reorderChild( self.ap_mask, 1 )
    self.ap_mask:setVisible(false)
    --满了时的怒气条外发光
    self.ap_highlight = tolua.cast( self.proxy:getNode('s_highlight_ap'), "CCSprite" )
    self.ap_highlight:setVisible(false)


不同职业需要的进度条种类也不同,效果


兑换或者领取功能:

        chip_rate:setString( current_Chips_num..'/'..chip_proto.max_count )
     
        local percent = current_Chips_num/chip_proto.max_count
        
        progress:setPercentage( 100 * percent )
        
        l_not_get:setVisible(  percent < 100 )

游戏开始时可以根据加载资源完成度实现进度条加载效果,有时也会放在定时器里为实现某种功能定时检测

创建CCProgressTo或者是CCProgressFromTo动作,让CCProgressTimer执行。


CCProgressTo(float duration, float fPercent)

CCProgressFromTo(float duration, float fFromPercentage, float fToPercentage)

eg:

local action =  XTargetedAction:create( self.progress_hp, CCProgressTo:create( 0.5, self.hp/self.max_hp*100 ) )

self.dialog:runAction( action )





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值