• <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
            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

            傳個效果圖



            SkillButton.h
            /*
                實現技能冷卻效果 

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

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

                /** 創建一個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; }

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

                /** 技能冷卻完畢回調*/
                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度旋轉)
                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);

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

                mCDTime = cdTime;
                return true;
            }

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

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

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

                //準備一個5秒旋轉360度的動畫(逐漸覆蓋半透模板形成冷卻效果;這里進行計時冷卻動畫的實現和時間控制)
                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));
            }

            /** 技能冷卻完成回調 */
            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 風輕云淡 閱讀(5710) 評論(0)  編輯 收藏 引用 所屬分類: cocos2d
            一本色道久久HEZYO无码| 丁香五月综合久久激情| 亚洲综合久久久| 国内精品伊人久久久影院| 亚洲精品美女久久久久99| 久久国产色AV免费观看| 久久精品国产亚洲5555| 久久久精品2019免费观看| 大蕉久久伊人中文字幕| 久久久久久精品无码人妻| 久久99久久99小草精品免视看| 久久精品99无色码中文字幕| 亚洲αv久久久噜噜噜噜噜| 精品久久久久中文字幕一区| 日日躁夜夜躁狠狠久久AV| 青春久久| 久久黄视频| 91精品免费久久久久久久久| 亚洲精品乱码久久久久久| 久久人人爽人人爽AV片| 99久久久国产精品免费无卡顿| 一级a性色生活片久久无少妇一级婬片免费放| 人妻少妇久久中文字幕 | 国产成人精品久久一区二区三区av | 伊人热热久久原色播放www| 久久九九有精品国产23百花影院| 久久人人青草97香蕉| 久久亚洲欧洲国产综合| 国产99久久久久久免费看| 狠狠色丁香久久综合五月| 久久精品国产久精国产一老狼| 欧美精品丝袜久久久中文字幕 | 久久香综合精品久久伊人| 久久精品无码一区二区三区日韩| 狠狠干狠狠久久| 久久久久久久综合日本亚洲 | 人妻无码αv中文字幕久久琪琪布| 久久亚洲精品视频| 国产免费福利体检区久久| 久久国产精品免费一区二区三区| 久久综合欧美成人|