Buttons
这块主要是研究了CCControlEvent
的各种情况. 我只贴出核心代码.
SEL_CCControlHandler ButtonsLayer::onResolveCCBCCControlSelector(cocos2d::CCObject *pTarget, const char *pSelectorName)
{
CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, "onBtnClicked", ButtonsLayer::onBtnClicked);
return NULL;
}
void ButtonsLayer::onBtnClicked(cocos2d::CCObject *pSender, cocos2d::extension::CCControlEvent pCCControlEvent)
{
switch (pCCControlEvent) {
case CCControlEventTouchCancel:
this->mEventLabelBMFont->setString("Cancel");
break;
case CCControlEventTouchDown:
this->mEventLabelBMFont->setString("Touch Down");
break;
case CCControlEventTouchDragEnter:
this->mEventLabelBMFont->setString("Drag Enter");
break;
case CCControlEventTouchDragExit:
this->mEventLabelBMFont->setString("Drag Exit");
break;
case CCControlEventTouchDragInside:
this->mEventLabelBMFont->setString("Drag Inside");
break;
case CCControlEventTouchDragOutside:
this->mEventLabelBMFont->setString("Drag OutSide");
break;
case CCControlEventTouchUpInside:
this->mEventLabelBMFont->setString("Up Inside");
break;
case CCControlEventTouchUpOutside:
this->mEventLabelBMFont->setString("Up Outside");
break;
default:
break;
}
}
void MainScene::onAnimations(cocos2d::CCObject *pSender, cocos2d::extension::CCControlEvent pCCControlEvent)
{
const char * pCCBFileName = "ccb/Animations.ccbi";
const char * pCCNodeName = "AnimationsLayer";
cocos2d::extension::CCNodeLoader * pCCNodeLoader = AnimationsLayerLoader::loader();
CCScene *scene = CCScene::create();
CCNodeLoaderLibrary *lib = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
lib->registerCCNodeLoader("HeaderLayer", HeaderLayerLoader::loader());
if (pCCNodeName!=NULL && pCCNodeLoader!=NULL)
{
lib->registerCCNodeLoader(pCCNodeName, pCCNodeLoader);
}
CCBReader *reader = new CCBReader(lib);
CCNode *node = reader->readNodeGraphFromFile(pCCBFileName, this);
reader->autorelease();
if (node != NULL)
{
//获取AnimationManager ,并传递给AnimationsLayer
((AnimationsLayer*)node) ->setAnimationManager(reader->getAnimationManager());
scene->addChild(node);
}
this->mTitleLabelTTF->setString(pCCBFileName);
CCDirector::sharedDirector()->pushScene(scene);
}
AnimationsLayer.cpp
void AnimationsLayer::setAnimationManager(cocos2d::extension::CCBAnimationManager *pAnimationManager)
{
CC_SAFE_RELEASE_NULL(mAnimationManager);
mAnimationManager = pAnimationManager;
CC_SAFE_RETAIN(mAnimationManager);
}
CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, "onIdle", AnimationsLayer::onIdle);
void AnimationsLayer::onIdle(cocos2d::CCObject *pSender, cocos2d::extension::CCControlEvent pCCControlEvent)
{
//利用动作名字进行播放动作
this->mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Idle", 0.3f);
}