1        打开 - 内置T32  Cocos2dx-3.2一个专案

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

2        设置Cocos显示窗体的位置是在AppDelegate.cpp中:

3  设置自适应窗体大小的代码是在上面的代码后面紧接着就加入:

glview->setDesignResolutionSize(480,320, ResolutionPolicy::EXACT_FIT);

3        cocos2d-x-3.2项目案例(3.2版本号之后都去掉了CC前缀)

4        项目文件夹结构例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

编写公共的头文件T32.h

#ifndef
_T32_H__

#define
_T32_H__

#include
"cocos2d.h"

USING_NS_CC;

#define
winSize Director::getInstance()->getWinSize()

//由于3.2版本号中输出日志不建议使用CCLog,而是使用log,为了还想

//使用原来风格的CCLog做例如以下定义

#define
CCLog cocos2d::log

#endif
// !_T32_H__

编写:TBack.h

#ifndef
__TBack_H__

#define
__TBack_H__

#include
"T32.h"

//注意这时候不是CCLayer了,而是Layer了

class
TBack :public
Layer

{

public:

CREATE_FUNC(TBack);

bool
init();

};

#endif

编写TBack.cpp

#include
"TBack.h"

bool
TBack::init()

{

Layer::init();

//设置zorder

setLocalZOrder(100);

Menu*
menu = Menu::create();

MenuItemImage*
item = MenuItemImage::create("CloseNormal.png","CloseSelected.png",

[](Ref*){

Director::getInstance()->popScene();

});

menu->addChild(item);

//注意,这里的没有回调函数了,而是用lambada表达是来替换掉了。

item->setPosition(winSize.width / 2 -item->getBoundingBox().size.width
/ 2,

item->getBoundingBox().size.height / 2 -winSize.height
/ 2);

addChild(menu);

return
true;

}

编写:TMenu.h

#ifndef
__TMenu_H__

#define
__TMenu_H__

#include
"T32.h"

class
TMenu : public
Layer

{

public:

CREATE_FUNC(TMenu);

bool
init();

bool
TouchBegan(Touch*,
Event*);

};

#endif

编写TMenu.cpp

#include
"TMenu.h"

#include
"TBack.h"

#include
"T01CPP11.h"

static constchar*
title[] = {

"T01CPP11",

};

bool
TMenu::init()

{

Layer::init();

Menu*
menu = Menu::create();

addChild(menu);

for (inti = 0;
i < sizeof(title) /
sizeof(*title); ++i)

{

MenuItemFont*
item = MenuItemFont::create(title[i], [](Ref*sender){

MenuItem*
item = (MenuItem*)sender;

int
i = item->getTag() - 1000;

Layer*
l = NULL;

if (title[i] =="T01CPP11")

{

l =
T01CPP11::create();

}

if (l)

{

TBack*b =
TBack::create();

Scene*s =
Scene::create();

s->addChild(b);

s->addChild(l);

Director::getInstance()->pushScene(s);

}

});

menu->addChild(item);

item->setTag(1000 +i);

}

menu->alignItemsVertically();

// 触摸

auto
ev = EventListenerTouchOneByOne::create();

#if 0

ev->onTouchBegan = [](Touch*,Event*){

return
true;

};

#endif

//以下两行代码是同样的

//ev->onTouchBegan = std::bind(&TMenu::TouchBegan, this, std::placeholders::_1, std::placeholders::_2);

ev->onTouchBegan =CC_CALLBACK_2(TMenu::TouchBegan,this);

ev->onTouchMoved = [&](Touch*touch,
Event*){

setPositionY(getPositionY() +touch->getDelta().y);

};

_eventDispatcher->addEventListenerWithSceneGraphPriority(ev,this);

return
true;

}

bool
TMenu::TouchBegan(/*TMEnu* this, */Touch*,Event*)

{

return
true;

}

编写:T01CPP11.h

#ifndef
__T01CPP11_H__

#define
__T01CPP11_H__

#include
"T32.h"

class
T01CPP11:public
Layer

{

public:

CREATE_FUNC(T01CPP11);

bool
init();

void
mFoo();

};

#endif

编写:T01CPP11.cpp(主要介绍lambada表达式)

#include
"T01CPP11.h"

void
foo()

{

CCLog("foo is called\n");

}

void
funArg3(int n,charc,float
f)

{

CCLog("%d,%c,%f",n,c,f);

}

void
T01CPP11::mFoo()

{

CCLog("mFoo is called");

}

//关于lambda表达式

bool
T01CPP11::init()

{

Layer::init();

{

auto
func = []{return 1; };

int
i = func();

CCLog("i = %d",i);

}

//最简单的lambada表达式是仅仅要一个中括号和一个大括号

//[]捕获列表

//{}函数体

//1.捕获列表,能够放变量名。这里能够用来传递函数体内定义的变量

{

int
v = 100;

auto
func = [v]{returnv; };

int
x = func();

}

//2.捕获列表。能够捕获多个变量

{

int
p = 100, q = 200;

auto
func = [p, q]{returnp +
q; };

int
s = func();

}

// 3.捕获列表,有引用和传值两种方式。传值不能够改变,引用能够改变,而且改变外部的变量值

{

int
p = 100, q = 200;

auto
func = [p, &q]{q++; return
p + q; };

int
s = func();

}

//4.捕获列表,能够定义mutable类型的lambada,能改变传值的捕获參数。

//可是不能改变外部的变量值

{

int
p = 100, q = 200;

auto
func = [p, q]()mutable{p++;q++;
return p +
q; };

int
s = func();

CCLog("p = %d,q = %d,s = %d",p,
q, s);

}

//5.捕获列表,能够用=或者&捕获全部变量,=指传值,&表示引用

{

int
p = 100, q = 200;

//用&的时候。全部的都能够调用了,[&,p]:表示除了p不能被使用,其他的都能够被使用

auto
func = [&]{

return
p + q;

};

}

//略微复杂点的lambda表达式

{

auto
add = [](int v1,int
v2){returnv1 +
v2; };

auto
a = add(1 , 2);

}

//小括号里的是參数列表,參数列表和捕获列表差别在于。參数列表的參数由调用方决定,

//捕获列表由定义方决定,所以更加灵活

//更加复杂的lambada表达是。有返回值,返回值一般都省略

{

//->int表示返回值是int类型的

auto
add = [](int v1,int
v2)->int{returnv1 +
v2; };

}

//总结:auto func = [](){}

{

auto
func = [](){};

}

return
true;

}

// T01CPP11.cpp中使用使用function和bind函数的案例:

#include
"T01CPP11.h"

void
foo()

{

CCLog("foo is called\n");

}

void
funArg3(int n,charc,float
f)

{

CCLog("%d,%c,%f",n,c,f);

}

void
T01CPP11::mFoo()

{

CCLog("mFoo is called");

}

//关于lambda表达式

bool
T01CPP11::init()

{

Layer::init();

//std::function;

//std::bind

//函数指针类型

std::function<void()>func =
foo;

func();

//成员函数指针的赋值和调用

{

//注意在::域作用符后面加上*

void(T01CPP11::*FuncPtr)() = &T01CPP11::mFoo;

//调用成员函数的时候加上this

(this->*FuncPtr)();

}

//bind的功能,就是把一个详细函数,编程std::function对象

//bind能够把详细函数和std::function形式全然改变,比方參数数量的改变

{

std::function<void()>func =
std::bind(funArg3, 100,'c', 0.1f);

func();

}

//也能够改变參数顺序

{

//当中

//_1:表示function<void(float, char, int)>括号里的第一个參数

//_2:表示function<void(float, char, int)>括号里的第二个參数

//_3:表示function<void(float, char, int)>括号里的第三个參数

//后面3个占位符分别在funArg3中的顺序,而又用标记来代表上面括号里參数的的位置

std::function<void(float,char,
int)> func =
std::bind(funArg3,

std::placeholders::_3,std::placeholders::_2,std::placeholders::_1);

func(1.0f,
'd', 2000);

}

// 也能够同一时候改变參数个数和顺序

{

std::function<void(float,char)>
func = std::bind(funArg3,

100, std::placeholders::_2,std::placeholders::_1);

func(4.0f,
'x');

}

//也能够绑定成员函数

{

std::function<void()>func =
std::bind(&T01CPP11::mFoo,this);

func();

}

//以下的执行结果是:lambada is called

{

std::function<void()>
func = [](){};

std::function<void(int)>
func1 = std::bind([](int,
int){

CCLog("lambada iscalled");

},10,std::placeholders::_1);

func1(100);

}

return
true;

}

改动AppDelegate.cpp

A加入头文件:

#include
"TMenu.h"

#include
"TBack.h"

B:改动:applicationDidFinishLaunching()截图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

版权声明:本文博客原创文章,博客,未经同意,不得转载。

2.cocos2dx 3.2在语法的差异,lambada使用表达式和function和bind使用功能的更多相关文章

  1. python2.+进化至python3.+ 语法变动差异(不定期更新)

    1.输出 python2.+ 输出: print "" python3.+ 输出: print ("") 2.打开文件 python2.+ 打开文件: file ...

  2. VB.NET与C# 语法show差异

    学习VB.NET后发现,VB.NET与C#的语法基本的不同在两个部分,这两部分搞通了,那就游刃有余,迎刃而解了. 现将其对照总结例如以下: 一.实体部分 (与VB相比.在C#和VB.NET中,实体的使 ...

  3. MySQL基本语法(一):和SQL Server语法的差异小归纳

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  4. 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

    1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的 ...

  5. informix(南大通用)sql语法的差异

    1.create view  444(...)  as select ...from... 2.insert into select.......union  select     不支持 请分开写 ...

  6. NetworkComms V2版本与V3版本语法的差异

    NetworkComms网络通信框架序言 NetworkComms通信框架中V3版本是一次重要的升级,底层做了诸多改变,但语法上与V2版本相比,差不并不大. 监听端口: V3中 IPEndPoint ...

  7. Kotlin语法(函数和lambda表达式)

    三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...

  8. Cocos2d-x v3.0 新的事件调度方法 lambda表达式的使用

    欢迎添� Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24603251 Coc ...

  9. Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API

    新语法 方法引用Method references Lambda语法 Lambda语法在AndroidStudio中报错 Stream API 我正参加2016CSDN博客之星的比赛 希望您能投下宝贵 ...

随机推荐

  1. DiskFileUpload类别

    1.2.2 DiskFileUpload类 DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发者通过这个类来与Apache文件上传组件进行交互.以下介绍DiskFileUp ...

  2. Android 开发环境搭建之——ADT-Bundle for Windows

    ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...

  3. redmine忘记username和password

    环境: Ubuntu 13.10 bitnami-redmine-2.5.1-1-linux-x64-installer.run 用bitnami安装完redmine以后,有是否忘记了username ...

  4. 【Java GUI】Java GUI基金会

    AWT和Swing Swing是个AWT改进和扩展. 书写GUI规划.Swing和AWT曾效力.他们共存 Java基础类(JFC)于. 虽然AWT和Swing都提供了构造图形界面元素的类.但它们的虫药 ...

  5. Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构

    WatchKit app和WatchKit extension一起实现了app的界面.当用户在Apple Watch中操作时,WatchKit app从storyboards中选择合适的场景.比如,如 ...

  6. 什么是Cyclomatic Complexity(圈复杂度)?

    Campwood Software SourceMonitor Version 3.5 The freeware program SourceMonitor lets you see inside y ...

  7. Android使用开源项目Xutils实现多线程下载文件

    #1.下载utils项目 https://github.com/wyouflf/xUtils #2布局文件里实现UI <LinearLayout xmlns:android="http ...

  8. (2) 用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检測模型

    步骤一,首先要使voc-release4.01目标检測部分的代码在windows系统下跑起来: 參考在window下执行DPM(deformable part models) -(检測demo部分) ...

  9. 一切从编辑器说起:web前端代码编辑器

    俗话说:工欲善其事,必先利其器. 工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 前端写代码也是一样,需要一个好的适合自己的代码编辑器. 我想 ...

  10. win8.1 usb3 速度慢的解决方法

    我买的金士顿u盘 驱动也装了,口业插对了 速度还是很慢 30m左右 解决方法 1 搞定了·,主板驱动问题.卸了主板驱动usb3.0的速度立马上100m/s,即使装了联想官方的驱动也会影响USB3.0的 ...