cocos2d-x test学习[1]
controller.cpp
std::function<TestScene*()> callback;//一个是返回值,一个是参数。返回值是TestScene*,参数是()里的东西
Controller g_aTestNames[] = { //
// TESTS MUST BE ORDERED ALPHABETICALLY
// violators will be prosecuted
//
{ "ActionManager", [](){return new ActionManagerTestScene(); } },
这里是lambda的语法。
C++11 的 lambda 表达式规范如下:
- [ capture ] ( params ) mutable exception attribute -> ret { body }
- [ capture ] ( params ) -> ret { body }
- [ capture ] ( params ) { body }
- [ capture ] { body }
如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。
另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:
- [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
- [this] 以值的方式捕获 this 指针。
- [&] 以引用的方式捕获所有的外部自动变量。
- [=] 以值的方式捕获所有的外部自动变量。
- [] 不捕获外部的任何变量。
此外,params 指定 lambda 表达式的参数。
ActionManagerTest.cpp
grossini->runAction( Sequence::create(
MoveBy::create(, Vec2(,)),
CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,this)),
nullptr)
);
auto pCallback = CallFunc::create(CC_CALLBACK_0(StopActionTest::stopAction,this)); // 注意这里没有传进参数就是0咯
CC_CALLBACK_N (摘自:http://my.oschina.net/u/555701/blog/219844)
// 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_CALCC_CALLBACK_1(HelloWorld::menuCloseCallback,this)LBACK_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__)
bind是一组用于函数绑定的模板。在对某个函数进行绑定时,可以指定部分参数或全部参数,也可以不指定任何参数,还可以调整各个参数间的顺序。对于未指定的参 数,可以使用占位符_1、_2、_3来表示。_1表示绑定后的函数的第1个参数,_2表示绑定后的函数的第2个参数,其他依次类推。
CC_CALLBACK_1不事先指定的有一个,也就是可以传进一个参数。不事先指定的参数就在LogicTest::bugMe的参数列表上。 这个个数和具体的函数个数是一致的。
但是下面这个还是没有理解,得之后再看下引擎的接口应该就知道了。
auto action = Sequence::create(
Place::create(Vec2(,)),
Show::create(),
MoveBy::create(, Vec2(,)),
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback1,this)),
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback2,this,_grossini)),
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback3,this,_grossini,0xbebabeba)),
nullptr); _grossini->runAction(action);
CC_CALLBACK_0已经不需要了,直接用std::bind就行了。
auto action1 = Sequence::create(
MoveBy::create(, Vec2(,)),
CallFunc::create( std::bind(&ActionCallFunction::callback1, this) ),
l->setPosition(VisibleRect::center().x, VisibleRect::top().y-);
Cocos2d引擎家族,包括Cocos2d-x,Cocos2d-JS的坐标系统是继承于OpenGL的右手笛卡尔坐标系(Right-handed Cartesian Coordinate System)。
Cocos2d坐标系的特点是:
- 原点为屏幕左下角
- 向右为X轴正方向
- 向上为Y轴正方向
auto pMove1 = MoveBy::create(, Vec2(, ));
auto pMove2 = MoveBy::create(, Vec2(-, ));
auto pSequenceMove = Sequence::createWithTwoActions(pMove1, pMove2);
auto pRepeatMove = RepeatForever::create(pSequenceMove);
pRepeatMove->setTag(kTagSequence); auto pScale1 = ScaleBy::create(, 1.5f);
auto pScale2 = ScaleBy::create(, 1.0f/1.5f);
auto pSequenceScale = Sequence::createWithTwoActions(pScale1, pScale2);
auto pRepeatScale = RepeatForever::create(pSequenceScale);
pRepeatScale->setTag(kTagSequence); // 用同一个tag
void StopAllActionsTest::stopAction(float time)
{
auto sprite = getChildByTag(kTagGrossini);
sprite->stopAllActionsByTag(kTagSequence);
}
这里将pRepeatMove和pRepeatScale设置成同一个tag,然后stopAllActionsByTag就可以停止这两个运用了。
ActionEaseTest.cpp
// rotate and jump
auto jump1 = JumpBy::create(, Vec2(-s.width+, ), , );
auto jump2 = jump1->reverse();
auto rot1 = RotateBy::create(, *);
auto rot2 = rot1->reverse(); auto seq3_1 = Sequence::create(jump2, jump1, nullptr);
auto seq3_2 = Sequence::create( rot1, rot2, nullptr);
auto spawn = Spawn::create(seq3_1, seq3_2, nullptr);
auto action = Speed::create(RepeatForever::create(spawn), 1.0f);
Spawn是同时动作,Sequence是顺序动作。
CocosDenshionTest.cpp
class Button : public Node//, public TargetedTouchDelegate
{
public:
static Button *createWithSprite(const char *filePath)
{
auto b = new (std::nothrow) Button();
if (b && !b->initSpriteButton(filePath)) {
delete b;
b = nullptr;
}
b->autorelease();
return b;
}
自定义button类,继承自Node。
Button *btnPlay = Button::createWithText("play");
btnPlay->onTriggered([]() {
SimpleAudioEngine::getInstance()->playBackgroundMusic(MUSIC_FILE, true);
});
点击触发事件用OnTriggered和匿名函数。
// preload background music and effect
SimpleAudioEngine::getInstance()->preloadBackgroundMusic( MUSIC_FILE );//用于预加载背景音乐,其中 pszFilePath 为音乐文件所在的目录位置。
SimpleAudioEngine::getInstance()->preloadEffect( EFFECT_FILE ); //用于预加载音效文件,其中 pszFilePath 为音效文件所在的目录位置。
加载音乐和音效通常是一个耗时的过程,为了防止由即时加载产生的延迟导致实际播放与游戏不协调的现象发生,在播放音效和背景音乐之前,需要预加载音乐文件。
cocos2d-x test学习[1]的更多相关文章
- cocos2d&cocos2dx学习资源
汇总一下自己学习Cocos2d和cocos2dx认为比較好的一些资源: 书籍: <iPhone&iPad cocos2d游戏开发实战> Steffen Itterheim < ...
- xcode5. 安装cocos2d-x 学习中。。。
找了一些帖子 没搞出来,后来找到原因了 如今的cocos2d版本号在xcode.5上 没右模版了. 用命令行 来运行.看了官方的文档.最终攻克了--- 对于自己解决的问题都会感到点兴奋. .. ...
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- iOS手势学习UIGestureRecognizer & cocos2d 手势推荐
iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer // 长按UIPanGestur ...
- ios游戏开发--cocos2d学习(1)
学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...
- cocos2d 粒子效果以及Particle Designer粒子工具的学习
最近在学习cocos2d中的粒子效果吧,下面就把学到的和大家分享下吧! Now!我们先了解下类结构吧 -- CCParticleSystem(所有粒子系统的父类) -- CCParticleSyste ...
- 开始写下自己的python的cocos2d, pyglet学习
开始写下自己的python的cocos2d, pyglet学习 2014年01月18日 13:52:36 我要做程序达人 阅读数 9051更多 分类专栏: python的cocos2d和pyglet ...
- cocos2d学习记录
视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...
- cocos2d学习笔记
doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner 收费的 CCLabl ...
- Cocos2d 学习资料推荐
总算找到了一本介绍cocos2d的好书,注意,不是cocos2d-x!这本书叫 <cocos2d 权威指南> 定价99元,淘宝60多元,详细介绍了cocos2d的各个方面!不过你需要有oc ...
随机推荐
- 【转】4G内存下MySQL修改配置文件以优化效率(来自discuz)
摘要:公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库. ...
- 分布式应用下的Redis单机锁设计与实现
背景 最近写了一个定时任务,期望是同一时间只有一台机器运行即可.因为是应用是在集群环境下跑的,所以需要自己实现类一个简陋的Redis单机锁. 原理 主要是使用了Redis的SET NX特性,成功设置的 ...
- MongoDB C Driver使用教程
MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...
- centos 安装 rabbitMQ
此类文章一大堆,本文主要站在开发角度保证基本rabbitmq的基本访问. 系统:centos6 64bit 官方指引:https://www.rabbitmq.com/install-rpm.html ...
- iOS On-Demand Resources简单理解
ios9引入了一个新功能,On-Demand Resources,它是app thinning 的一部分.这个机能简单的说,就是在下载app的时候,app中包含的不重要资源不下载,等到需要时,在由系统 ...
- gcc 使用
参数 -E 只进行预处理-S 预处理和编译,生成汇编文件-c 预处理,编译和汇编,生成目标文件-g ...
- VC++ 应用程序无法正常启动0xc0150002
使用VC++开发软件,编译后的程序打不开,弹出错误框: 使用Dpends Walker查看依赖项,没有什么异常. 然后,右键"计算机",选择"管理",打开计 ...
- virtaulbox视图模式常用切换
virtaulbox发现菜单不见,如何切换视图模式呢? 很简单,通过快捷键主机(host)键 Host+F 换到全屏模 ...
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- xml dtd 定义元素
ANY 如果需要定义某个元素的值可以是任意类型,可采用如下语法 <!ELEMENT 元素名 ANY> DTD必须定义XML文档中允许出现的所有元素,所以下面这样是不行的,因为<hel ...