cocos2d-x学习笔记
来源:互联网 发布:三国志11优化补丁 编辑:程序博客网 时间:2024/06/07 06:12
一. lambda表达式
lambda表达式采用引用传值时需要特别小心变量的生命周期,引用在调用lambda函数时变量可能已经被释放了(如局部变量)。尽可能使用传值。计算生命周期时,lambda函数和普通新定义的函数加上selector是没有什么区别的。
二. 回调的几种方法
参见: http://www.cocoachina.com/bbs/read.php?tid=217556
回调的参数一般是两种之一:
1. 用函数指针传递回调函数
例如:typedef void (Ref::*SEL_SCHEDULE)(float) 定义了一个名为SEL_SCHEDULE的类函数指针,能传递Ref这个类中的函数,参见http://blog.csdn.net/iamshaofa/article/details/17614615
2. 用std::function传递回调函数,在C++11以上支持
例如:std::function
方法a. this->schedule(SEL_SCHEDULE(&HelloWorld::test), 1.0f);方法b. this->schedule(schedule_selector(HelloWorld::test), 1.0f);方法c. this->schedule([](float dt){log("test");}, 1.0f, "test");
其中SEL_SCHEDULE和schedule_selector是一样的,只差了一个指针的区别,因为源代码中:
(定义一个函数指针)typedef void (Ref::*SEL_SCHEDULE)(float);(再封装函数指针)#define schedule_selector(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
对应的函数声明:
方法a和b调用的接口为:void Node::schedule(SEL_SCHEDULE selector, float interval),以函数指针为参数方法c调用的接口为:void Node::schedule(const std::function<void(float)> &callback, float interval, const std::string &key),以std::function为参数
三. 屏幕适配
FrameSize、WinSize、VisibleSize、VisibleOrigin以及三种屏幕适配模式:[无间落叶](转载请保留出处):http://blog.leafsoar.com/archives/2013/05-10.html
其中WinSize = designResolutionSize,即逻辑上的屏幕大小
Node->setNormalizedPosition的位置计算方法:
// pseudo code void setNormalizedPosition(Vec2 pos) { Size s = getParent()->getContentSize(); _position = pos * s; }
并且场景的默认ContentSize为WinSize(参见CCScene的Init()方法),所以在NOBORDER的屏幕模式下,将元素设置NormalizedPosition为在边角上,并addChild到场景层可能会看不到。
四. 元素大小
Sprite的getContentSize()和SpriteFrame->getRect().size是一致的,都不受scale的影响。ContentSize也不能使超出的部分隐藏,其没有边界的概念。而Sprite->getTexture->getContentSize的大小就不一样了,因为一个texture上可能包含其它图片,所以比较大。此外经过试验,如果使用setSpriteFrame更换精灵的图片,contentSize和SpriteFrame->getRect().size都不会改变!
五. Win32下字符乱码问题
Win32下默认中文是gbk,而cocos2dx默认是UTF8,所以要先用iconv转换,详情参见这篇文章,成功解决了问题:
http://www.tuicool.com/articles/juaeaiR (cocos2dx有自带的iconv库,v3.8版本在external/win32-specific/icon下,找不到的搜索看看即可。需要添加头文件和库文件。文章中还有封装的iconv_convert函数)
- Cocos2d-x 学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x 学习笔记
- cocos2d-x 学习笔记
- cocos2d-x学习笔记
- Cocos2d-x 学习笔记
- Cocos2d-x 学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记!
- cocos2d-x学习笔记
- cocos2d-x 学习笔记
- cocos2d-x学习笔记
- UITextField右侧小圆叉
- phpcms上传到服务器后台登录验证码无法显示的问题
- Gpg4Win 加密
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
- linux shell脚本读取用户输入的参数
- cocos2d-x学习笔记
- Docker推出了Docker云,给大家介绍下哈!
- input 双击后不出现历史记录
- linux 学习点二 (grep\find ,路径)
- Java多线程二
- AngularJS开发实战(1)
- [iOS]细说OC中的load和initialize方法
- 我最喜欢问应聘者的问题 & 回答思路
- 内联函数&&函数重载&&函数缺省值