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]的更多相关文章

  1. cocos2d&amp;cocos2dx学习资源

    汇总一下自己学习Cocos2d和cocos2dx认为比較好的一些资源: 书籍: <iPhone&iPad cocos2d游戏开发实战> Steffen Itterheim < ...

  2. xcode5. 安装cocos2d-x 学习中。。。

    找了一些帖子  没搞出来,后来找到原因了   如今的cocos2d版本号在xcode.5上 没右模版了. 用命令行 来运行.看了官方的文档.最终攻克了--- 对于自己解决的问题都会感到点兴奋. .. ...

  3. Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. iOS手势学习UIGestureRecognizer & cocos2d 手势推荐

    iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestur ...

  5. ios游戏开发--cocos2d学习(1)

    学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...

  6. cocos2d 粒子效果以及Particle Designer粒子工具的学习

    最近在学习cocos2d中的粒子效果吧,下面就把学到的和大家分享下吧! Now!我们先了解下类结构吧 -- CCParticleSystem(所有粒子系统的父类) -- CCParticleSyste ...

  7. 开始写下自己的python的cocos2d, pyglet学习

    开始写下自己的python的cocos2d, pyglet学习 2014年01月18日 13:52:36 我要做程序达人 阅读数 9051更多 分类专栏: python的cocos2d和pyglet ...

  8. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  9. cocos2d学习笔记

    doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner  收费的 CCLabl ...

  10. Cocos2d 学习资料推荐

    总算找到了一本介绍cocos2d的好书,注意,不是cocos2d-x!这本书叫 <cocos2d 权威指南> 定价99元,淘宝60多元,详细介绍了cocos2d的各个方面!不过你需要有oc ...

随机推荐

  1. C和指针 第十四章 预处理器 头文件

    编写一个C程序,第一个步骤称为预处理,预处理在代码编译之前,进行一些文本性质的操作,删除注释.插入被include的文件.定义替换由#define定义的符号,以及确定代码的部分内容是否应该按照条件编译 ...

  2. 一条代码解决各种IE浏览器兼容性问题

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 <!Doctype html> ...

  3. BZOJ2007——[Noi2010]海拔

    1.题意:一个裸的最小割 2.分析:直接转成对偶图最短路就好了,水爆了!(雾) #include <queue> #include <cstdio> #include < ...

  4. 关于oracle中日期使用

    spl> select * from emp         where dates          between         to_date('2007-06-12 10:00:00' ...

  5. 【GoLang】golang 中 defer 参数的蹊跷

    参考资料: http://studygolang.com/articles/7994--Defer函数调用参数的求值 golang的闭包和普通函数调用区别:http://studygolang.com ...

  6. How-to-uninstall-Meteor // install Meteor manually

    How-to-uninstall-Meteor :  http://www.uninstallapp.com/article/How-to-uninstall-Meteor-.html install ...

  7. python第15天

    Python之Web前段: 一. JavaScript 一. JavaScript 1. 什么是JavaScript ? JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释 ...

  8. 解决SprngMVC中ResponseBody注解中文乱码

    配置文件前面加入如下结构,版本号3.2.5 <bean class="org.springframework.web.servlet.mvc.method.annotation.Req ...

  9. Java GridBagLayout 简单使用

    这里只介绍了很基础布局构建及使用,主要是关于 GridBagLayout. 首先整套流程大概是, 声明一个 GridBagLayout 对象 private GridBagLayout gridBag ...

  10. MVC前台页面做登录验证

    最近接触了一个电商平台的前台页面,需要做一个登录验证,具体情况是:当用户想要看自己的订单.积分等等信息,就需要用户登录之后才能查询,那么在MVC项目中我们应该怎么做这个前台的验证呢? 1.我在Cont ...