• cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建


    一、创建文件

           首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene

    最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =。

    二、GameScene.h和GameScene.cpp

          简单来说就是先搭建一个空的场景,为了以后一些游戏主题的层做一个容器,然后我们应该怎么处理呢?

    然后呢……先贴代码~

    //GameScene.h
    
    
    #ifndef WeiXinDaPlane_GAME_SCENE_H__
    #define  WeiXinDaPlane_GAME_SCENE_H__
    
    #include "cocos2d.h"
    
    USING_NS_CC;
    
    class GameScene: public Scene
    {
    public:
        GameScene();
        ~GameScene();
    
        virtual bool init();           //这是二段式的设计模式~就是把创建和初始化分开,详情请见子龙山人的博客~
    
        CREATE_FUNC(GameScene);
    
    protected:
    
    private:
    };

    简单的来说就是继承了Scene之后,创建一个空的Scene。

    1、CREATE_FUNC(GameScene),上节已详述,就是cocos2d封装的一个创建和初始化的宏定义~。

    2、init() 是继承Scene的,基本上GameScene的操作最后都是要从这里加入的~

    然后是cpp,就是很简单的实现一下下,做一个空的容器而已~

    #include "GameScene.h"
    
    GameScene::GameScene()
    {
        
    }
    
    GameScene::~GameScene()
    {
    
    }
    
    bool GameScene::init()
    {
        if (!Scene::init())
        {
            return false;
        }
    
    
        return true;
    }

    三、WelcomeScene 切换到 GameScene

           大家是否还记得WelcomeScene那里是有个LoadIng的动画,我们需要做的就是在Loading动画后加入一个转场的操作,这里需要一个动作序列,大家请看代码~

    auto animation = Animation::create();
        animation->setDelayPerUnit(0.5f);
        animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading1.png"));
        animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading2.png"));
        animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading3.png"));
        animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading4.png"));
        auto animate = Animate::create(animation);
    
    
    
        auto animationDone = CallFunc::create(
            [=](){
                auto scene = GameScene::create();
                auto transition = TransitionSlideInB::create(1, scene);
                Director::getInstance()->replaceScene(transition);
    
            });
    
        auto sequence = Sequence::create(animate, animationDone, NULL);
    
    
        gameLoading->runAction(sequence);

    3、所谓的sequence就是一个动作的序列,你可以把多个连续的动作合并创建出一个sequence,然后让对象直接run这个sequence,就会把所有的动作按顺序执行一遍。

    4、然后转场的关键地方就是在那个animationDone,这里是一个XXX表达式(小白~~不知道如何表达),就是一个隐式的函数(没有函数名),然后其中的内容就是,实例化一个GameScene,加入一个过场动画,然后让Dicrector执行这个动画就会转场啦~。

    然后默默放出效果图~

    image

    然后就看下一节吧~

  • 相关阅读:
    [BZOJ]1040: [ZJOI2008]骑士
    [BZOJ]1177: [Apio2009]Oil
    【luogu3384】【模板】树链剖分
    【NOIP2012TG】solution
    【NOIP2014TG】solution
    【NOIP2016TG】solution
    【NOIP2015TG】solution
    【NOIP2016】【LCA】【树上差分】【史诗级难度】天天爱跑步
    【网络流】【BZOJ1221】【HNOI2001】软件开发
    【网络流】【BZOJ1061】【NOI2008】志愿者招募
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/3930783.html
Copyright © 2020-2023  润新知