• 建立一个测试项目


    自行建立了一个cocos工程,尝试自己写写代码。

    发现cocos一个做法,似乎cocos比较少去自定义一个scene,于是一般的做法是自定义一个layer,并写一个createScene静态函数,在这个静态函数中,创建一个scene和这个layer的一个对象,并把这个对象加入scene中,返回scene。

    另一个做法是把构造函数设为保护类成员,再专门定义一个create静态函数负责对象创建。cocos的对象估计都有一套内存管理策略,因此禁止了用户手动new和delete。

    cocos用到不少新版c++的特性,例如回调函数的一个宏:
    #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
    #define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
    用了新版的bind函数(以前只有bind1st和bind2nd)。这个函数是一个“适配器”,作用是把函数指针“改造”成一个函数对象,selector是函数指针,之后的都是参数。可以指定原来函数参数与新函数对象的对应关系,例如:
    int f(int, char, double);
    
    auto frev = bind(f, _3, _2, _1);        // 翻转参数顺序
    std::placeholders::_1表示宏定义中 “...”的第一个参数
    有意思的是bind可以绑定非静态成员函数,例如:CC_CALLBACK_0(Test1Layer::closeItemFunc,this)),把this指针作为第一个参数即可。
    bind函数的详细说明在这里。
    总的来说,这个宏的用法如下
    CC_CALLBACK_0(函数指针,参数1(如果是成员函数,是this指针),参数2,参数3,...)生成一个有一个参数的普通函数对象,或一个有0个参数的成员函数对象






  • 相关阅读:
    解决Tomcat请求中文乱码的问题
    Bootstrap 兼容 IE
    Spring+MyBatis多数据源配置实现
    年度总结与计划
    AJAX 提交表单以及文件上传
    移动端Web开发调试工具:Chrome DevTools
    SpringMVC 之 @ResponseBody 和 @RequestBody
    goland快键键防忘
    MySQL日志文件影响数据库的各种类型活动
    何为云计算
  • 原文地址:https://www.cnblogs.com/dydx/p/4297598.html
Copyright © 2020-2023  润新知