게임에서 단추가 있는 일반적인 알림 상자(2)

7455 단어
코드는 다음과 같습니다.
    
#include <iostream>
#include "knet_typedef.h"
#include "cocos2d.h"
#include "cocos-ext.h"

USING_NS_CC;
USING_NS_CC_EXT;

#include "ClientDefine.h"
#include "TTButton.h"
using namespace  std;

extern class TTButton;


struct  MSGBOXBINIT
{
public:
    
    MSGBOXBINIT()
    {
        m_target = NULL;
        
        m_okHandle = NULL;
        m_cancelHandle = NULL;
    }
    
    
    std::string  m_strTitle;
    std::string  m_strText;
    
    CCNode *  m_target ;
    SEL_CallFuncO  m_okHandle;
    SEL_CallFuncO  m_cancelHandle;
};


class  TTMsgBoxB :public  CCLayer
{
public:
    
    TTMsgBoxB();
    ~TTMsgBoxB();
    
    
    CREATE_FUNC(TTMsgBoxB)
    virtual bool init();
    
    virtual void onEnter();
    virtual void onExit();
    
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
    
    void   initWithStruct(CCObject * pObj);
    
    void   onOkBtnClick(CCObject * pObj);
    
    void   onCacelBtnClick(CCObject * pObj);
    
    MSGBOXBINIT  getInitStruct();
    
private:
    MSGBOXBINIT  m_initS;
    
    CCScale9Sprite  *  m_bgSprite;
    CCLabelTTF   *  m_titleLabel;
    CCLabelTTF   *  m_textLabel;
    
    TTButton  *  m_okBtn;
    TTButton  *  m_cacelBtn;
    
    
    CC_SYNTHESIZE(CCNode *, m_target, Target);
    CC_SYNTHESIZE(SEL_CallFuncO, m_okSelector, OKSelector);
    CC_SYNTHESIZE(SEL_CallFuncO, m_cancelSelector, CancelSelector);
    
    CC_SYNTHESIZE(CCNode *, m_destroyTarget, DestroyTarget);//      
    CC_SYNTHESIZE(SEL_CallFuncO, m_destroyOKSelector, DestroyOKSelector);//   OK    
    CC_SYNTHESIZE(SEL_CallFuncO, m_destroyCancelSelector, DestroyCancelSelector);//   OK    
};
#include "TTMsgBoxB.h"

TTMsgBoxB::TTMsgBoxB()
{
    m_target =  NULL;
    m_okSelector = NULL;
    m_cancelSelector = NULL;
    
    m_destroyTarget = NULL;
    m_destroyOKSelector = NULL;
    m_destroyCancelSelector = NULL;
}


TTMsgBoxB::~TTMsgBoxB()
{
    
}


 bool TTMsgBoxB::init()
{
    //    touch  
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128 -1, true);
    
    return  true;
}

 void TTMsgBoxB::onEnter()
{
    CCLayer::onEnter();
    
    
}

 void TTMsgBoxB::onExit()
{
    CCLayer::onExit();
    
    
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}


bool TTMsgBoxB::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    return  true;
}

void TTMsgBoxB::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
    
}

void TTMsgBoxB::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
    
}

void TTMsgBoxB::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
{
    
}



void  TTMsgBoxB:: initWithStruct(CCObject * pObj)
{
    if (pObj == NULL)
    {
        return ;
    }
    
    m_initS = * (MSGBOXBINIT *) pObj;
    
    m_target = m_initS.m_target;
    m_okSelector =  m_initS.m_okHandle;
    m_cancelSelector = m_initS.m_cancelHandle;
    
    
    CCSize   totalSize = CCSizeMake(
                                    400/TT_SCALE_RATE,
                                    0
                                    );
    
    
    int   totalHeight = 0 ;
    
    //  
    m_okBtn =  TTButton::createWithImage("but_sure.png");
    if (m_okBtn)
    {
        m_okBtn->addTouchupInsideHandle(this, callfuncO_selector(TTMsgBoxB::onOkBtnClick));
        
        m_okBtn->setPosition(ccp(
                              52/TT_SCALE_RATE,
                              25/TT_SCALE_RATE
                              ));
    
        this->addChild(m_okBtn,2);
    }
    
    m_cacelBtn =  TTButton::createWithImage("but_cancel.png");
    if (m_cacelBtn)
    {
        m_cacelBtn->addTouchupInsideHandle(this, callfuncO_selector(TTMsgBoxB::onCacelBtnClick));
        
        m_cacelBtn->setPosition(ccp(
                                 208/TT_SCALE_RATE,
                                 25/TT_SCALE_RATE
                                 ));
        
        this->addChild(m_cacelBtn,2);
    }
    
    
    
    //  
    CCSize   textSize =  CCSizeMake(
                                    320/TT_SCALE_RATE,
                                    0
                                    );
    
    m_textLabel  =  CCLabelTTF::create(m_initS.m_strText.c_str(), "Helvetica", 24/TT_SCALE_RATE, textSize, kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
    
    if (m_textLabel)
    {
        m_textLabel->setColor(ccc3(109, 98, 79));
        
        m_textLabel->setAnchorPoint(ccp(
                                        0.5f,
                                        0
                                        ));
        
        m_textLabel->setPosition(ccp(
                                     0.5f *   totalSize.width,
                                     m_okBtn->getPosition().y + m_okBtn->getContentSize().height + 20/TT_SCALE_RATE
                                     ));
        
        totalHeight =  m_textLabel->getPosition().y +  m_textLabel->getContentSize().height + 35/TT_SCALE_RATE;
        
        this->addChild(m_textLabel,2);
    }
    
    
    //  
    m_titleLabel  =  CCLabelTTF::create(m_initS.m_strTitle.c_str(), "Helvetica-Bold", 36/TT_SCALE_RATE);
    if (m_titleLabel)
    {
        m_titleLabel->setColor(ccc3(56, 31, 14));
        
        m_titleLabel->setAnchorPoint(ccp(
                                         0.5f,
                                         0
                                         ));
        
        m_titleLabel->setPosition(ccp(
                                      0.5f *   totalSize.width,
                                      totalHeight
                                      ));
        
        totalHeight =  m_titleLabel->getPosition().y + m_titleLabel->getContentSize().height +  35/TT_SCALE_RATE;
        
        this->addChild(m_titleLabel ,2);
    }

    totalSize.height =  totalHeight;
    

    //  
    CCSpriteFrame   *  bgFrame =  CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("tipsbg.png");
    if (bgFrame)
    {
        m_bgSprite =  CCScale9Sprite::createWithSpriteFrame(bgFrame);
    }
    
    if (m_bgSprite)
    {
        m_bgSprite->setAnchorPoint(CCPointZero);
        
        m_bgSprite->setContentSize(totalSize);
        
            //     size
        this->setContentSize(totalSize);
    
        this->addChild(m_bgSprite,1);
    }

}

void  TTMsgBoxB:: onOkBtnClick(CCObject * pObj)
{
    if (m_destroyTarget &&  m_destroyOKSelector)
    {
        (m_destroyTarget->*m_destroyOKSelector)(this);
    }
    
    if (m_target &&  m_okSelector)
    {
        (m_target->*m_okSelector)(this);
    }
    
    
}

void   TTMsgBoxB::onCacelBtnClick(CCObject * pObj)
{
    if (m_destroyTarget &&  m_destroyCancelSelector)
    {
        (m_destroyTarget->*m_destroyCancelSelector)(this);
    }
    
    if (m_target &&  m_cancelSelector)
    {
        (m_target->*m_cancelSelector)(this);
    }
}

 MSGBOXBINIT TTMsgBoxB:: getInitStruct()
{
    return  m_initS;
}

효과도는 다음과 같습니다.

좋은 웹페이지 즐겨찾기