实现3个按钮的回调函数

1.首先了解下触摸分发机制(CCTouchDispatcher):

查找顺序:

applicationDidFinishLaunching——>    pDirector->setOpenGLView(pEGLView)——> m_pTouchDispatcher->setDispatchEvents(true)——>CCTouchDispatcher

可以看到项目中,将多点触摸和单点触摸放到了一个代理中,我们使用触摸机制的时候,直接找代理即可实现

/** Adds a standard touch delegate to the dispatcher's list.
     * See StandardTouchDelegate description.
     * IMPORTANT: The delegate will be retained.
     * @lua NA
     */
    void addStandardDelegate(CCTouchDelegate *pDelegate, int nPriority);

    /** Adds a targeted touch delegate to the dispatcher's list.
     * See TargetedTouchDelegate description.
     * IMPORTANT: The delegate will be retained.
     * @lua NA
     */
    void addTargetedDelegate(CCTouchDelegate *pDelegate, int nPriority, bool bSwallowsTouches);

现在先实现关于游戏的按钮,点击按钮后,显示游戏相关的信息,比如作者等等。这里同样采用防御式编程方式,可以场景切换可以使用栈的方式进行pushScene和pop。因为这里的关于场景画面节点不多,而且一般停留时间少。所以使用栈的方式切换加快时间。因为要显示大量文字,这里采用xml形式。创建一个字典来读取里面的信息。在这里没必要使用文字本地化。

	//创建字典,读取xml信息
		CCDictionary *pAboutInfo = CCDictionary::createWithContentsOfFile("about.xml");
		CC_BREAK_IF(pAboutInfo==NULL);

		for (int i=1;i<5;i++)
		{
			char szKeyName[_NAME_LEN_]={0};
			sprintf(szKeyName,"people%d",i);

			//读取xml for key
			CCString *pStringRule =dynamic_cast<CCString*>(pAboutInfo->objectForKey(szKeyName));
			CC_BREAK_IF(pStringRule==NULL);

			char szName[128] = {0};
			sprintf(szName,pStringRule->m_sString.c_str());

			CCLabelTTF * pTroLabel = CCLabelTTF::create(szName,"Arial",80,CCSizeMake(800,80),kCCTextAlignmentLeft,kCCVerticalTextAlignmentTop);
			CC_BREAK_IF(pTroLabel==NULL);
			pTroLabel->setColor(ccc3(0.1f,0.1f,0.1f));
			pTroLabel->setPosition(ccp(SCREEN_WIDTH/2+50.f,SCREEN_HIGHT - 120.f*i));
			addChild(pTroLabel,enZOrderTital);
		}

场景切换:

void MTAboutsceneLayer::menuReplaceCallback( CCObject* pSender )
{
	do 
	{
		CCDirector::sharedDirector()->popScene();

		return;
	} while (false);
	CCLog("Fun CCCAboutsceneLayer::menuReplaceCallback Error!");
}


2.现在添加游戏退出的场景。

2.1 可以想到退出的时候,使用的背景是和当前背景一致的。所以直接在开始场景中添加一个layer就可以,但是,我们点击退出layer的时候,其他的layer是不能被触摸的。也就是点击退出按钮,出现的退出laye上r的触摸优先级最高。这里添加上单点触摸代理。然后实现触摸函数,就可以使用了

 void CWXQutiLayer::onEnter()
 {
	 CCLayer::onEnter();
	 //添加触摸代理, 独占触摸层
	 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -130, true);
 }

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


2.2 退出的时候,自然要保存当前的分数




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值