cocos2d-x 入门游戏:许特尔图_3 of 4



5. 触摸

在初始化函数中:

    setTouchEnabled(true);

setTouchMode(kCCTouchesOneByOne);

 

在.h中声明:

bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

 

在.cpp中实现:

bool LayerGame::ccTouchBegan(CCTouch *pTouchCCEvent *pEvent)

{

    static int touchOrder = 1;

    for (int i = 0; i< _rank*_rank; i++)

    {   //注意boundingBox()前面被括号括起来了,是个整体

        if (((CardItem *)allCards->objectAtIndex(i))->boundingBox()

                .containsPoint(pTouch->getLocation()))

        {   //只有当前的触摸次序与数字卡的序号相等,才能继续下去

            if (touchOrder == ((CardItem *)allCards->objectAtIndex(i))->getIdx())

            {

                touchOrder++;

    ((CardItem *)allCards->objectAtIndex(i))->removeFromParentAndCleanup(true);

            }

 

            if(touchOrder == _rank*_rank +1 )

            {

              CCLog("you Win");

              touchOrder = 1; //重置触摸次序

              CCScene *scene = GameOver::scene(_rank,passtime);

              CCDirector::sharedDirector()->replaceScene(scene);

             }

        }

    }

    return false;

}

6. 结束场景:

结束场景由

1.显示成绩的标签 LabelTTF

2.返回主场景的Redo菜单

3.返回开始场景的Back菜单

组成

 

 

结束场景接收2个参数:

1. 难度等级 rank

2. 完成时间  passtime

 

Passtime不再它用

Rank还要返回,在.h中设置为全局

int _rank;

 

参数传递与保存:

class GameOver : public CCLayer

{

public:

    static CCScene * scene(int rank,float t);

    //CREATE_FUNC(GameOver)

    static GameOver *create(int rank,float t);

    bool init(int rank,float t);

 

    void redoCallBack(CCObject *);

    void backCallBack(CCObject *);

CCScene *GameOver::scene(int rank,float t)

{

   。。。。。。

    return scene;

}

GameOver *GameOver::create(int rank,float t)

{

    GameOver *pRet = new GameOver;

   。。。。。。

    return pRet;

}

bool GameOver::init(int rank,float t)

{

_rank = rank;

 

当前还没有开定时器进行计时,先把时间显示的放一放,把菜单项先做掉:

.h

 void redoCallBack(CCObject *);

 void backCallBack(CCObject *);

.cpp

    CCMenuItem *redo = CCMenuItemFont::create("Redo"); redo->setTarget(this,menu_selector(GameOver::redoCallBack));

    CCMenuItem *back = CCMenuItemFont::create("Back"); back->setTarget(this,menu_selector(GameOver::backCallBack));

    CCMenu *menu = CCMenu::create(redo,back,NULL);

    menu->alignItemsHorizontallyWithPadding(30);

    addChild(menu);

void GameOver::redoCallBack(CCObject *)

{

    CCDirector::sharedDirector()->replaceScene(LayerGame::scene(_rank));

}

void GameOver::backCallBack(CCObject *)

{

    CCDirector::sharedDirector()->replaceScene(GameStart::scene());

}

7. 定时器与计时

主场景,在.h

    void mySchedule(float delta);

    float passtime;

.cpp中,调用和实现

passtime = 0.0;

schedule(schedule_selector(

 ayerGame::mySchedule),0.1);

CCLabelTTF *ttf = CCLabelTTF::create("0.00","Arial",30);

    addChild(ttf,0,1313);

    ttf->setPosition(ccp(winSize.width/2 + 50,winSize.height-50));

 

注意:ttfTag

void LayerGame::mySchedule(float delta)

{

    passtime += delta;

CCString *str = 

      CCString::createWithFormat("%0.2f",passtime);

    CCLabelTTF *ttf = (CCLabelTTF *)getChildByTag(1313);

    ttf->setString(str->getCString());

8. 中文显示与声音

中文显示在cocos2d-x中不支持,要想显示中文,其中一种方法是使用CCDictionary。即自己写一个.xml文件,Value是中文,再通过Key拿中文

 

    CCDictionary *dic = CCDictionary::createWithContentsOfFile("chinese.xml");

    CCString * str1 = (CCString *)dic->objectForKey("simple");

    CCString * str2 = (CCString *)dic->objectForKey("normal");

    CCString * str3 = (CCString *)dic->objectForKey("hard");

    CCString * str4 = (CCString *)dic->objectForKey("quit");

    CCMenuItem *simple = CCMenuItemFont::create(str1->getCString());

    simple->setColor(ccGREEN);

CCMenuItem *normal = CCMenuItemFont::create(str2->getCString());

.......

声音要使用到cocosdention

 

 

VS中这个是没什么好说的

 

但在Linux中会链接出错:

 

 

必须在Makefile文件中-lcocosdenshion

SHAREDLIBS += -lcocos2d -lcocosdenshion

init()中预加载:

 CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("click.wav");

 

CCTouchBegan()中:

如果点击正确的数字,发出声音:

 if (touchOrder == ((CardItem *)allCards->objectAtIndex(i))->getIdx())

 {

  。。。

    CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("click.wav");

  。。。

 }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值