zoukankan      html  css  js  c++  java
  • (原创)cocos2d-x 3.0 示例代码分析5:testBasic

    今天我们看下示例里面的场景基类~~直接上代码

    // testBasic.h
    // 场景基类
    
    #ifndef _TEST_BASIC_H_
    #define _TEST_BASIC_H_
    
    #include "cocos2d.h"
    #include "VisibleRect.h"
    
    USING_NS_CC;
    
    class TestScene : public Scene  // 继承scene
    {
    public: 
        // 构造函数
        TestScene(bool bPortrait = false, bool physics = false);
        virtual void onEnter() override;  // 重载:onEnter
    
        virtual void runThisTest() = 0;  // 纯虚函数,用于运行场景
    };
    
    // C++ 11
    // 定义两个宏
    // CL:调用create方法创建对象并返回
    // CLN:通过new方法创建对象并返回
    #define CL(__className__) [](){ return __className__::create();}
    #define CLN(__className__) [](){ auto obj = new __className__(); obj->autorelease(); return obj; }
    
    #endif
    // testBasic.cpp
    // 星月倾心贡献~~~~
    
    #include "testBasic.h"
    #include "controller.h"
    #include "extensions/cocos-ext.h"
    #include "cocostudio/CocoStudio.h"
    
    TestScene::TestScene(bool bPortrait, bool physics/* = false*/)
    { 
        // 构造函数中调用父类scene的init()方法
        if (physics)
        {
    #if CC_USE_PHYSICS
            TestScene::initWithPhysics();
    #else
            Scene::init();
    #endif
        }
        else
        {
            Scene::init();
        }
    }
    
    // 按钮标签的回调
    void testScene_callback(Ref *sender )
    {
        auto scene = Scene::create();  // 创建一个场景
    
        auto layer = new TestController();  // 创建控制层
        scene->addChild(layer);  // 将层加入到场景中
        layer->release();  // 因为是new的,所以需要手动释放
    
        Director::getInstance()->replaceScene(scene);  // 替换场景
    
        cocostudio::ArmatureDataManager::destroyInstance();  // 销毁cocostudio的armature的实例
    }
    
    // 进入场景
    void TestScene::onEnter()
    {
        Scene::onEnter();  // 调用父类方法
    
        //add the menu item for back to main menu
        TTFConfig ttfConfig("fonts/arial.ttf", 20);  // 设置字体和大小
        auto label = Label::createWithTTF(ttfConfig,"MainMenu");  // 创建一个标签
    
        auto menuItem = MenuItemLabel::create(label, testScene_callback );  // 创建一个按钮标签
        auto menu = Menu::create(menuItem, NULL);
    
        menu->setPosition( Point::ZERO );
        menuItem->setPosition( Point( VisibleRect::right().x - 50, VisibleRect::bottom().y + 25) );
    
        addChild(menu, 1);
    }

    基类的场景还是很简单的,这里就不说了~
    祝大家工作顺利,事业有成了,哈哈~~(小白:我喜欢~~)

    作者使用 cocos2d-x 3.0 示例代码分析,未经作者允许,请勿转载!在此谢谢各位手下留情~~~

    本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~

    原文地址:http://www.cnblogs.com/wodehao0808/p/4094829.html  

  • 相关阅读:
    vs.net 2005, 没有找到MSVCR80D.dll的完美解决方案
    C++内存布局从一个修改私有变量的问题想到的
    堆栈详解
    加载.x文件
    深入分析规则引擎
    高级着色语言HLSL入门(5)
    字符数组,字符指针,Sizeof总结
    C++ 隐式和显式 初始化,类型转换
    fread()和fwrite()函数分析
    结构体 对齐的问题
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4094829.html
Copyright © 2011-2022 走看看