3.3.1 如何新建一个场景

下面通过HelloWorld项目中新建场景的过程来总结使用场景的过程。

1)定义一个场景类实例。

Cocos2D-x引擎中的HelloWorld范例中,HelloWorldScene.cpp中的scene函数即是新建场景的地方,如代码清单3-9所示。

代码清单3-9 HelloWorld新建场景类实例

CCScene* HelloWorld::scene()
{
    //新建场景类实例
    CCScene *scene=CCScene::create();
    //CCScene *scene=CCScene::node();
    //定义布景层
    HelloWorld *layer=HelloWorld::create();
    //将布景层加入场景
    scene->addChild(layer);
    //返回场景类
    return scene;
}

通过create方法构造一个场景,当然,create函数是Cocos2D-x 2.0以后的版本才有的方式,2.0之前的版本采用的是后面被注释掉的方法,然后将定义的布景层作为子项加入场景中,要显示的成员都在布景层中。至于布景层的定义,将在后面做介绍。

2)获得并运行场景。

在游戏入口AppDelegate类中的applicationDidFinishLaunching函数中调用上一步定义的方法,并使用导演类的runWithScene方法运行场景,如代码清单3-10所示。

代码清单3-10 获得并运行场景

bool AppDelegate::applicationDidFinishLaunching(){
    //初始化导演类
    CCDirector *pDirector=CCDirector::sharedDirector();
    //设置OpenGL视图
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
    //设置是否显示每帧时间
    pDirector->setDisplayStats(true);
    //设置每帧时间
    pDirector->setAnimationInterval(1.0/60);
    //创建场景
    CCScene *pScene=HelloWorld::scene();
    //运行场景
    pDirector->runWithScene(pScene);
    return true;
}

到这里已经可以新建一个场景并把它加入游戏中了。

这时也许有人会有疑问:一般来讲,游戏都会由多个场景组成,至少会有菜单场景和游戏场景,更复杂的游戏甚至会有更多场景,那么如何在场景间切换呢?下一节将通过引擎自带的tests例子来学习如何在场景间切换。