Cocos2d-x场景(Scene)详解

449 阅读3分钟

Cocos2d-x场景(Scene)详解

  场景(Scene)是一个容器,容纳游戏中的各个元素,如精灵,标签,节点对象。它负责着游戏的运行逻辑,以帧为单位渲染这些内容。

  可以想象游戏就像一个电影,场景是观看者能看到的正在发生的情景。一个电影至少需要一个场景,一个游戏也至少需要一个Scene。在使用Cocos2d-x进行游戏的开发中,可以制作任意数量的场景,并在不同场景间轻松切换。

场景的创建

  • 创建一个简单场景

    auto scene = Scene::create();
    
  • 运行当前场景

    Director::getInstance()->runWithScene(scene);
    
  • 自定义场景

    class MyScene: public Scene
    {
        public:
        CREATE_FUNC(MyScene);
        virtual bool init();
    }
    

场景图

  场景图绝对了场景内节点对象的渲染顺序,z-order同样影响着场景图。渲染时 z-order 值大的节点对象会后绘制,值小的节点对象先绘制。

一个场景

  让我们构建一个简单的场景。Cocos2d-x是右手坐标系,也就是坐标原点(0,0)在展示区的左下角,当在场景内放置一些节点对象设置坐标位置时,注意左下角是坐标计算的起点。

auto dirs = Director::getInstance();
Size visibleSize = dirs->getVisibleSize();

auto myScene = Scene::create();
auto label1 = Label::createWithTTF("My Game", "Marker Felt.ttf", 36);
label1->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));

myScene->addChild(label1);

auto sprite1 = Sprite::create("mysprite.png");
sprite1->setPosition(Vec2(100, 100));

myScene->addChild(sprite1);

  当运行这个代码的时候,我们看到有一个场景,场景里面有一个标签和一个精灵。

场景切换

  开始一个新游戏,改变关卡或结束游戏时,为了给用户不同的效果呈现,大多需要切换不同的场景。

场景切换的方式

效果图

  有很多场景切换的方式,每种都有特定的方法。

auto myScene = Scene::create();

  runWithScene()用于开始游戏,加载第一个场景。只用于第一个场景!

Director::getInstance()->runWithScene(myScene);

  replaceScene()使用传入的场景替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。

Director::getInstance()->replaceScene(myScene);

  pushScene()将当前运行中的场景暂停并压入到场景栈中,再将闯入的场景设置为当前运行场景。只有存在正在运行的场景时才能被调用该方法。

Director::getInstance()->pushScene(myScene);

  popScene()释放当前场景,再从场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。

Director::getInstance()->popScene();

场景切换的效果设置

效果图

  在场景切换的过程中,可以添加一些效果:

auto myScene = Scene::create();

//过渡颜色
Director::getInstance()->replaceScene(TransitionFade::create(0.5,myScene,Color3B(0,255,255)));

//翻转X
Director::getInstance()->replaceScene(TransitionFlipX::create(2,myScene));

//过渡幻灯片
Director::getInstance()->replaceScene(TransitionSlideInT::create(1,myScene));

Cocos2d-x场景(Scene)详解_ufgnix0802的博客-CSDN博客_cocos2d(ufgnix0802.blog.csdn.net/article/det…)

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,  点击查看活动详情