• <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年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

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

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

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

            傳個(gè)效果圖



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

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

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

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

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

                /** 技能按鈕點(diǎn)擊回調(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;       // 蒙板精靈,黑色半透明(這個(gè)是為了顯示一個(gè)冷卻計(jì)時(shí)效果)
                cocos2d::CCProgressTimer*   mProgressTimer; // 時(shí)間進(jìn)度條精靈(360度旋轉(zhuǎn))
                float                       mCDTime;          // CD時(shí)間
            };


            #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時(shí)要注意上下層
                
            // 最下方是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)進(jì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ǎn)擊回調(diào) */
            void SkillButton::skillClickCallBack(cocos2d::CCObject* obj)
            {
                // 冷卻計(jì)時(shí),即時(shí)狀態(tài)技能按鈕不可點(diǎn)擊
                mItemSkill->setEnabled(false);

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

                // 設(shè)置精靈進(jìn)度條為順時(shí)針
                mProgressTimer->setVisible(true);
                mProgressTimer->setType(kCCProgressTimerTypeRadial);

                //準(zhǔn)備一個(gè)5秒旋轉(zhuǎn)360度的動(dòng)畫(huà)(逐漸覆蓋半透模板形成冷卻效果;這里進(jìn)行計(jì)時(shí)冷卻動(dòng)畫(huà)的實(shí)現(xiàn)和時(shí)間控制)
                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)
            {
                // 設(shè)置蒙板不可見(jiàn)
                mStencil->setVisible(false);

                // 進(jìn)度條技能不可見(jiàn)
                mProgressTimer->setVisible(false);

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

            測(cè)試代碼:
                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 風(fēng)輕云淡 閱讀(5710) 評(píng)論(0)  編輯 收藏 引用 所屬分類: cocos2d
            亚洲精品综合久久| 久久精品国产影库免费看| 久久夜色精品国产噜噜亚洲a| 久久婷婷五月综合国产尤物app| 亚洲AV日韩精品久久久久久久 | 久久九九久精品国产免费直播| 伊人久久综合成人网| 91精品国产综合久久四虎久久无码一级| 久久亚洲欧洲国产综合| 国产精品18久久久久久vr| 模特私拍国产精品久久| 亚洲国产精品久久久久婷婷老年 | 久久人人爽人人爽人人片AV东京热 | 午夜精品久久久久久影视riav| 久久久中文字幕| 亚洲AV无码1区2区久久| 无码精品久久一区二区三区| 伊人色综合久久天天| 人妻精品久久久久中文字幕69| 久久天天日天天操综合伊人av| 久久九九亚洲精品| 久久综合给久久狠狠97色| 蜜桃麻豆WWW久久囤产精品| 久久国产精品免费| 色噜噜狠狠先锋影音久久| 久久亚洲AV成人无码电影| 久久国语露脸国产精品电影 | 久久久久99精品成人片试看| 亚洲乱码日产精品a级毛片久久| 久久se精品一区二区影院 | 亚洲欧美日韩精品久久| 久久精品无码一区二区无码| 亚洲中文字幕久久精品无码喷水| 久久综合亚洲鲁鲁五月天| 亚洲国产成人精品91久久久 | 久久国产热这里只有精品| 日本精品久久久久中文字幕8| 狠狠色丁香婷综合久久| 国产精品久久国产精麻豆99网站 | 亚洲人成网站999久久久综合| 久久久久人妻一区精品|