cocos2d-x ios游戏开发初认识(四) 场景的切换

来源:互联网 发布:淘宝网商贷款扣钱 编辑:程序博客网 时间:2024/06/05 20:16

这章主要讲cocos2d-x中场景的切换,做过ios开发经常会用到通过一些点击事件从而跳到另外一个界面,最熟悉的就是uibutton,下面讲下场景的切换其实和ios开发中的思想都差不多。

cocos2d-x是通过CCMenu来创建一些菜单从而实现菜单的点击。CCMenuItem有很多的子类,比如:


CCMenuItemFont  文字菜单 

CCMenuItemImage 图片菜单

CCMenuItemLabel 标签菜单


都可以加入到菜单CCMenu中去。。。。

下面掩饰一个 CCMenuItemFont 文字菜单的跳转

    

//创建文字菜单

CCMenuItemFont *item = CCMenuItemFont::create("开始游戏");//传一个参数

//添加到菜单栏里面

CCMenu *menu =CCMenu::create(item,NULL);//可以传多个

this->addChild(menu); //添加到当前的层

运行:


可以看到在屏幕的中间看到一个开始游戏菜单。


下面设置设置菜单的点击事件让点击时候跳到另外一个场景,这时的菜单创建时就要选择另外一个了。


函数原型:

    CCMenuItemFont *item = CCMenuItemFont::create(<#const char *value#>, <#cocos2d::CCObject *target#>, <#SEL_MenuHandler selector#>)

看看SEL_MenuHandler 要传的参数

typedefvoid (CCObject::*SEL_MenuHandler)(CCObject*);

SEL_MenuHandler是一个函数指针 指向一个无返回值 函数参数为CCObject类型的函数 

下面定义一个这样的函数:

在类里面定义:

class MainScene:publicCCLayer {

private:

   void onMenuItem(CCObject *obj); //定义一个菜单点击事件

private:

   void update(float t);           //定义一个帧回掉函数

private:

   CCSprite *sprite;

public:

   virtualbool init();               //初始化

   staticCCScene* scene();  //类方法用来创建场景对象

   CREATE_FUNC(MainScene);            //创建MainScene层对象

};

函数实现:

    //创建文字菜单

//    CCMenuItemFont *item = CCMenuItemFont::create("开始游戏"); //传一个参数

    CCMenuItemFont *item =CCMenuItemFont::create("开始游戏",this,menu_selector(MainScene::onMenuItem));//点击事件

    //添加到菜单栏里面

   CCMenu *menu =CCMenu::create(item,NULL);//可以传多个

   this->addChild(menu); //添加到当前的层


//菜单点击事件

voidMainScene::onMenuItem(CCObject *obj)

{

    CCLOG("开始游戏被点击了!!");

}

运行:

点击开始游戏 菜单可以看到信息被打印 输出:


知道点击会调用这个函数 下面在这个函数里改变场景就实现了场景的切换。

一、再添加一个场景

新建一个GameScene 类


类的声明:

using namespace cocos2d;

class GameScene:publicCCLayer

{

public:

    //必须实现的三个函数 

   virtualbool init();

   staticCCScene *scene();

    CREATE_FUNC(GameScene);

};

类的实现:

CCScene *GameScene::scene()

{

   CCScene *scene =CCScene::create();    //场景

   GameScene *layer =GameScene::create();//

    scene->addChild(layer);                //层添加到场景

   return scene;                          //返回场景

}

boolGameScene::init()

{

   if(!CCLayer::init())

    {

        return false;

    }

   CCSprite *sprite =CCSprite::create("Icon-72.png");        //创建一个精灵

   CCSize winSize =CCDirector::sharedDirector()->getWinSize();//得到屏幕的宽高

    sprite->setPosition(ccp(winSize.width/2, winSize.height/2));//设置位置

    

   this->addChild(sprite);                                    //添加精灵

    

    return true;

}

有了前面的基础 这些基本的函数写法都会很熟悉了。

再回到MainScene.m  的onMenuItem函数

//菜单点击事件

voidMainScene::onMenuItem(CCObject *obj)

{

    CCLOG("开始游戏被点击了!!");

   CCScene *scene =GameScene::scene();//得到game场景

    CCDirector::sharedDirector()->replaceScene(scene);//原场景释放掉跳转到新场景

}

运行:

点击开始游戏:


 

跳转到game场景

弹出的效果还可以修改:

    //也可以

    CCTransitionCrossFade *transitionScene =CCTransitionCrossFade::create(2, scene);//淡入淡出的效果

   CCDirector::sharedDirector()->pushScene(transitionScene);                         //新场景在原先场景的后面

这里有很多效果 都可以去尝试


场景的切换就写到这里。。



   



0 0
原创粉丝点击