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:
self.dialog:runAction( action )