• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2011年7月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            技能冷卻的效果跟魔獸世界中的技能冷卻類似,功能如下:
            技能圖標點擊時會有按下效果,抬起后開始冷卻計時,冷卻計時技術(shù)后該圖標才可以再次進行點擊。

            對應的圖片資源:
                注意:添加child時要注意上下層
                最下方是CCMenuItemImage 按鈕圖片
                其次是模版圖片 半透明模版圖片
                最上方是CCProgressTimer 圖片是最下圖中較大的那個盾牌圖片
            這是使用的圖片資源
                
            動畫原理
            非冷卻狀態(tài)時只顯示CCMenuItemImage,當冷卻開始計時時,將按鈕設為不可點擊狀態(tài),同將半透明模板和進度條精靈設置為可見狀態(tài),并且進度條精靈開始進行旋轉(zhuǎn)動作,旋轉(zhuǎn)結(jié)束后在回調(diào)函數(shù)中將半透明模板和進度條精靈設為不可見,按鈕重新設置為可點擊狀態(tài)。

            使用方法
            創(chuàng)建一個SkillButton指針,修改冷卻時間,動畫表現(xiàn)(如蒙板從旋轉(zhuǎn)改為豎直方向),并將SkillButton添加到layer上即可。

            傳個效果圖



            SkillButton.h
            /*
                實現(xiàn)技能冷卻效果 

                Notice:添加child時要注意上下層關(guān)系
                最下方是按鈕 其次是半透明的模版圖片 最上方是CCProgressTimer進度條精靈
            */
            #ifndef _SKILLBUTTON_H_
            #define _SKILLBUTTON_H_
            #include <cocos2d.h>

            class SkillButton : public cocos2d::CCNode
            {
            public:
                SkillButton();
                virtual ~SkillButton();

                /** 創(chuàng)建一個SkillButton對象
                    
            */
                static SkillButton* createSkillButton(float cdTime,
                                                    const char* stencil_file_name, 
                                                    const char* button_normal_name, 
                                                    const char* button_click_name);

                /** CD時間設置
                    
            */
                void    setCDTime(float time) { mCDTime = time; }
                float   getCDTime() const { return mCDTime; }

                /** 技能按鈕點擊回調(diào) */
                void    skillClickCallBack(cocos2d::CCObject* obj);

                /** 技能冷卻完畢回調(diào)*/
                void    skillCoolDownCallBack(cocos2d::CCNode* node);

            private:

                /** 初始化 */
                bool    init(float cdTime, const char* stencil_file_name, const char* button_normal_name, const char* button_click_name);

            private:
                cocos2d::CCMenuItemImage*   mItemSkill;     // 技能按鈕
                cocos2d::CCMenu*            mMenuSkill;     // 技能按鈕所在menu
                cocos2d::CCSprite*          mStencil;       // 蒙板精靈,黑色半透明(這個是為了顯示一個冷卻計時效果)
                cocos2d::CCProgressTimer*   mProgressTimer; // 時間進度條精靈(360度旋轉(zhuǎn))
                float                       mCDTime;          // CD時間
            };


            #endif


            SkillButton.cpp
            #include "SkillButton.h"


            USING_NS_CC;

            SkillButton::SkillButton():
                mItemSkill(NULL),
                mMenuSkill(NULL),
                mStencil(NULL),
                mProgressTimer(NULL),
                mCDTime(1.f)
            {

            }

            SkillButton::~SkillButton()
            {

            }

            SkillButton* SkillButton::createSkillButton(float cdTime, const char* stencil_file_name, const char* button_normal_name, const char* button_click_name)
            {
                SkillButton* skillButton = new SkillButton();
                if (skillButton && skillButton->init(cdTime, stencil_file_name, button_normal_name, button_click_name))
                {
                    skillButton->autorelease();
                    return skillButton;
                }
                else
                {
                    delete skillButton;
                    skillButton = NULL;
                }

                return NULL;
            }

            bool SkillButton::init(float cdTime, const char* stencil_file_name, const char* button_normal_name, const char* button_click_name)
            {
                CCAssert(stencil_file_name, "SkillButton::init stencil_file_name != NULL");
                CCAssert(button_normal_name, "SkillButton::init button_normal_name != NULL");
                CCAssert(button_click_name, "SkillButton::init button_click_name != NULL");

                // Notice:添加child時要注意上下層
                
            // 最下方是CCMenuItemImage 其次是模版圖片 最上方是CCProgressTimer

                
            // 添加技能按鈕
                mItemSkill = CCMenuItemImage::create(button_normal_name, button_click_name, this, menu_selector(SkillButton::skillClickCallBack));
                mItemSkill->setPosition(CCPointZero);

                mMenuSkill = CCMenu::create(mItemSkill, NULL);
                mMenuSkill->setPosition(CCPointZero);
                addChild(mMenuSkill, -100);

                // 添加陰影模版
                mStencil = CCSprite::create(stencil_file_name);
                mStencil->setPosition(CCPointZero);
                mStencil->setVisible(false);
                addChild(mStencil);

                // 添加旋轉(zhuǎn)進度條精靈
                CCSprite* progressSprite = CCSprite::create(button_normal_name);
                mProgressTimer = CCProgressTimer::create(progressSprite);
                mProgressTimer->setPosition(CCPointZero);
                mProgressTimer->setVisible(false);
                addChild(mProgressTimer, 100);

                mCDTime = cdTime;
                return true;
            }

            /** 技能按鈕點擊回調(diào) */
            void SkillButton::skillClickCallBack(cocos2d::CCObject* obj)
            {
                // 冷卻計時,即時狀態(tài)技能按鈕不可點擊
                mItemSkill->setEnabled(false);

                // 模版可見
                mStencil->setVisible(true);

                // 設置精靈進度條為順時針
                mProgressTimer->setVisible(true);
                mProgressTimer->setType(kCCProgressTimerTypeRadial);

                //準備一個5秒旋轉(zhuǎn)360度的動畫(逐漸覆蓋半透模板形成冷卻效果;這里進行計時冷卻動畫的實現(xiàn)和時間控制)
                CCActionInterval* action_progress_to = CCProgressTo::create(mCDTime, 100);
                CCCallFunc* action_callback = CCCallFuncN::create(this, callfuncN_selector(SkillButton::skillCoolDownCallBack));
                mProgressTimer->runAction(CCSequence::create(action_progress_to, action_callback, NULL));
            }

            /** 技能冷卻完成回調(diào) */
            void SkillButton::skillCoolDownCallBack(CCNode* node)
            {
                // 設置蒙板不可見
                mStencil->setVisible(false);

                // 進度條技能不可見
                mProgressTimer->setVisible(false);

                // 按鈕置為可用
                mItemSkill->setEnabled(true);
            }

            測試代碼:
                mSkillButton = SkillButton::createSkillButton(2.f, "stencil.png", "normal.png", "click.png");
                mSkillButton->setPosition(ccp(s.width/2, s.height/2));
                addChild(mSkillButton);

            代碼下載

            參考地址:
            http://blog.sina.com.cn/s/blog_732784f70100umuj.html 
            http://www.cocos2dev.com/?p=64 

            posted on 2012-08-28 11:33 風輕云淡 閱讀(5718) 評論(0)  編輯 收藏 引用 所屬分類: cocos2d
            亚洲日韩中文无码久久| 久久亚洲欧美国产精品| 国产精品久久久天天影视香蕉| 国产精品久久国产精品99盘| 精品久久久久久中文字幕| 成人免费网站久久久| 久久精品国产黑森林| 亚洲午夜精品久久久久久app| 久久久久亚洲av成人网人人软件| 久久综合给合久久狠狠狠97色69| 久久久久久a亚洲欧洲aⅴ| 欧美成a人片免费看久久| 久久久一本精品99久久精品66| 久久久久夜夜夜精品国产| 理论片午午伦夜理片久久| 久久大香香蕉国产| 久久无码一区二区三区少妇| 久久精品一本到99热免费| 日韩久久久久中文字幕人妻| 97久久精品人妻人人搡人人玩| 久久天天躁狠狠躁夜夜2020老熟妇| 影音先锋女人AV鲁色资源网久久| 成人精品一区二区久久久| 久久久久久亚洲精品成人| 香港aa三级久久三级老师2021国产三级精品三级在| 久久人人爽人人人人爽AV| 精品久久久久久无码人妻蜜桃| 亚洲AV日韩AV永久无码久久 | 伊人精品久久久久7777| 青青青国产成人久久111网站| 97精品依人久久久大香线蕉97| 亚洲国产精品无码久久久久久曰| 欧美精品一区二区精品久久| 国产午夜久久影院| 国产精品久久网| 国产精品久久影院| 国产精品久久久久aaaa| 久久精品国内一区二区三区 | 中文字幕人妻色偷偷久久| 一本久道久久综合狠狠躁AV| 日产久久强奸免费的看|