Cocos2d-x 3.5 入门(一)

学习cocos2d有半个月了,一直从2.x学起,2.x是基础,前几天做触摸方面的东西,感受到2.x和3.x封装上一些区别,研究了一阵做出来,但是今天猛然发现前几天做的翻出来都忘记了。所以现在打算研究一点东西,就记录下来,与君共勉。

=======================================================

1、地图用tiled做好后导入到cocos2d相应的程序位置中,用下面这段很普通的语句:(TMXTiledMap::create("..."))


也会在如下位置报错:return _hasPremultipliedAlpha


原因是我需要将使用的tmx文件和产生tmx文件所使用的png文件都放到资源文件夹并加入工程中,我就是少了对应的png文件。


========================================================

2、不同于2.x,3.x用下面语句创建一个menuitemlabel:

 auto labelup = Label::createWithSystemFont("UP", "Arial", 52);

 auto upMenuItem = MenuItemLabel::create(labelup, CC_CALLBACK_1(HelloMap::menuCallback, this));


这里不能用CC_CALLBACK_0而只能用1,从http://www.cocoachina.com/bbs/read.php?tid=198291上面找到这样的讲解,摘录如下,可以解决此疑惑:

// new callbacks based on C++11
#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__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3 ##__VA_ARGS__)
看完后恍然大悟!不看不知道,一看...和没看一样...
这里主要注意两点:一是 std::bind,二是##_VA_ARGS_; ##_VA_ARGS_是可变参数宏,我就不多说了。重点讲的是std::bind。
std::bind是在C++ 11里新加入的成员。可以将bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表.
调用bind的一般形式为:
auto newCallback = bind(callback,arg_list);
其中,newCallback是一个可调用对象,arg_list是可以用逗号分隔的参数列表,至于是啥参数,那就看callback函数里有啥参数啦。也就是说,当我们调用newCallback时,newCallback会调用函数callback,并传递参数arg_list给callback.

看完上面的内容你的理解可能还比较模糊,那直接来个例子:有一个函数callback,如下,
1
intcallback(intone,chartwo,doublethree);
下面我们用bind来调用callback ?
1
2
autonewCallback = bind(callback,_1,_2,1.5);
intx = newCallback(10,'h');  //这句相当于:int x = callback(10,'h',1.5);
“_1″是一个占位符对象,用于表示当函数callback通过函数newCallback进行调用时,函数newCallback的第一个参数在函数callback的参数列表中的位置。第一个参数称为”_1″, 第二个参数为”_2″,依此类推,有意思吧。至于‘1.5’是指默认参数,它处于_1和_2的后面,所以它就是double类型的参数了.
在强调一点就是:_1这类占位符都定义在一个名为placeholders的命名空间中,而这个命名空间本身定义在std的命名空间中。为了使用这些名字,两个命名空间都要写上,如:
std::placeholders::_1;
这样编写贼麻烦,所以在要使用_1时,可以加上这么一句:
using namespace namespace_name; 恩,ok

恩,bind就介绍到这,讲的比较浅,不理解的可以百度研究下。最后再回过头来看下CC_CALLBACK的定义,是不是清晰多了?

======================================================================

3、一些tips

Xcode6.3中默认的iphone6模拟器的分辨率是:1334*750

把地图中最小单元的长和宽定义成宏,这样在精灵移动时好操作:#define MAPTILESIZE 33


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值