Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

1打开建好的T32 Cocos2dx-3.2的一个项目


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


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

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

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

4项目目录结构如下:


编写公共的头文件T32.h

#ifndef@H_450_33@ _T32_H__@H_450_33@

#define@H_450_33@ _T32_H__@H_450_33@

#include@H_450_33@ "cocos2d.h"@H_450_33@

USING_NS_CC@H_450_33@;

#define@H_450_33@ winSize@H_450_33@ Director@H_450_33@::geTinstance@H_450_33@()->getWinSize@H_450_33@()

//@H_450_33@因为3.2@H_450_33@版本中输出日志不建议使用CCLog,而是使用log,为了还想

//@H_450_33@使用原来风格的CCLog@H_450_33@做如下定义

#define@H_450_33@ CCLog@H_450_33@ cocos2d@H_450_33@::log@H_450_33@

#endif@H_450_33@ // !_T32_H__@H_450_33@

编写:TBACk.h

#ifndef@H_450_33@ __TBACk_H__@H_450_33@

#define@H_450_33@ __TBACk_H__@H_450_33@

#include@H_450_33@ "T32.h"@H_450_33@

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

class@H_450_33@ TBACk@H_450_33@ :public@H_450_33@ Layer@H_450_33@

{

public@H_450_33@:

CREATE_FUNC@H_450_33@(TBACk@H_450_33@);

bool@H_450_33@ init@H_450_33@();

};

#endif@H_450_33@

编写TBACk.cpp

#include@H_450_33@ "TBACk.h"@H_450_33@

bool@H_450_33@ TBACk@H_450_33@::init@H_450_33@()

{

Layer@H_450_33@::init@H_450_33@();

//@H_450_33@设置zorder@H_450_33@

setLocalZOrder@H_450_33@(100);

@H_388_86@menu@H_450_33@* menu@H_450_33@ = @H_388_86@menu@H_450_33@::create@H_450_33@();

@H_388_86@menuItemImage@H_450_33@* item@H_450_33@ = @H_388_86@menuItemImage@H_450_33@::create@H_450_33@("CloseNormal.png"@H_450_33@,"CloseSELEcted.png"@H_450_33@,

[](Ref@H_450_33@*){

popScene@H_450_33@();

});

@H_781_222@menu@H_450_33@->addChild@H_450_33@(item@H_450_33@);

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

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

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

addChild@H_450_33@(@H_781_222@menu@H_450_33@);

return@H_450_33@ true@H_450_33@;

}

编写:TMenu.h

#ifndef@H_450_33@ __TMenu_H__@H_450_33@

#define@H_450_33@ __TMenu_H__@H_450_33@

#include@H_450_33@ "T32.h"@H_450_33@

class@H_450_33@ TMenu@H_450_33@ : public@H_450_33@ TMenu@H_450_33@);

bool@H_450_33@ init@H_450_33@();

bool@H_450_33@ TouchBegan@H_450_33@(Touch@H_450_33@*, Event@H_450_33@*);

};

#endif@H_450_33@

编写TMenu.cpp

#include@H_450_33@ "TMenu.h"@H_450_33@

#include@H_450_33@ "TBACk.h"@H_450_33@

#include@H_450_33@ "T01CPP11.h"@H_450_33@

static@H_450_33@ const@H_450_33@char@H_450_33@* title@H_450_33@[] = {

"T01CPP11"@H_450_33@,

};

bool@H_450_33@ TMenu@H_450_33@::init@H_450_33@();

create@H_450_33@();

addChild@H_450_33@(@H_781_222@menu@H_450_33@);

for@H_450_33@ (int@H_450_33@i@H_450_33@ = 0; i@H_450_33@ < sizeof@H_450_33@(title@H_450_33@) / sizeof@H_450_33@(*title@H_450_33@); ++i@H_450_33@)

{

@H_388_86@menuItemFont@H_450_33@* item@H_450_33@ = @H_388_86@menuItemFont@H_450_33@::create@H_450_33@(title@H_450_33@[i@H_450_33@],[](Ref@H_450_33@*sender@H_450_33@){

@H_388_86@menuItem@H_450_33@* item@H_450_33@ = (@H_388_86@menuItem@H_450_33@*)sender@H_450_33@;

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

Layer@H_450_33@* l@H_450_33@ = NULL@H_450_33@;

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

{

l@H_450_33@ = T01CPP11@H_450_33@::create@H_450_33@();

}

if@H_450_33@ (l@H_450_33@)

{

TBACk@H_450_33@*b@H_450_33@ = TBACk@H_450_33@::create@H_450_33@();

Scene@H_450_33@*s@H_450_33@ = Scene@H_450_33@::create@H_450_33@();

s@H_450_33@->addChild@H_450_33@(b@H_450_33@);

s@H_450_33@->addChild@H_450_33@(l@H_450_33@);

pushScene@H_450_33@(s@H_450_33@);

}

});

@H_781_222@menu@H_450_33@->addChild@H_450_33@(item@H_450_33@);

item@H_450_33@->setTag@H_450_33@(1000 +i@H_450_33@);

}

@H_781_222@menu@H_450_33@->alignItemsVertically@H_450_33@();

// @H_450_33@触摸@H_450_33@

auto@H_450_33@ ev@H_450_33@ = EventListenerTouchOneByOne@H_450_33@::create@H_450_33@();

#if@H_450_33@ 0

ev@H_450_33@->onTouchBegan@H_450_33@ = [](Event@H_450_33@*){

return@H_450_33@ true@H_450_33@;

};

#endif@H_450_33@

//@H_450_33@下面两行代码是相同的@H_450_33@

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

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

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

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

};

_eventDispatcher@H_450_33@->addEventListenerWithSceneGraphpriority@H_450_33@(ev@H_450_33@,this@H_450_33@);

return@H_450_33@ true@H_450_33@;

}

bool@H_450_33@ TouchBegan@H_450_33@(/*TMEnu* this,*/@H_450_33@Event@H_450_33@*)

{

return@H_450_33@ true@H_450_33@;

}

编写:T01CPP11.h

#ifndef@H_450_33@ __T01CPP11_H__@H_450_33@

#define@H_450_33@ __T01CPP11_H__@H_450_33@

#include@H_450_33@ T01CPP11@H_450_33@:public@H_450_33@ T01CPP11@H_450_33@);

bool@H_450_33@ init@H_450_33@();

void@H_450_33@ mFoo@H_450_33@();

};

#endif@H_450_33@

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

#include@H_450_33@ "T01CPP11.h"@H_450_33@

void@H_450_33@ foo@H_450_33@()

{

CCLog@H_450_33@("foo is called\n"@H_450_33@);

}

void@H_450_33@ funArg3@H_450_33@(int@H_450_33@ n@H_450_33@,char@H_450_33@c@H_450_33@,float@H_450_33@ f@H_450_33@)

{

"%d,%c,%f"@H_450_33@,n@H_450_33@,c@H_450_33@,f@H_450_33@);

}

void@H_450_33@ @H_221_250@mFoo@H_450_33@()

{

"mFoo is called"@H_450_33@);

}

//@H_450_33@关于lambda@H_450_33@表达式

bool@H_450_33@ init@H_450_33@();

{

auto@H_450_33@ func@H_450_33@ = []{return@H_450_33@ 1; };

int@H_450_33@ i@H_450_33@ = func@H_450_33@();

"i = %d"@H_450_33@,i@H_450_33@);

}

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

//[]@H_450_33@捕获列表@H_450_33@

//{}@H_450_33@函数体@H_450_33@

//1.@H_450_33@捕获列表,可以放变量名,这里可以用来传递函数体内定义的变量@H_450_33@

{

int@H_450_33@ v@H_450_33@ = 100;

auto@H_450_33@ func@H_450_33@ = [v@H_450_33@]{return@H_450_33@v@H_450_33@; };

int@H_450_33@ x@H_450_33@ = func@H_450_33@();

}

//2.@H_450_33@捕获列表,可以捕获多个变量@H_450_33@

{

int@H_450_33@ p@H_450_33@ = 100,q@H_450_33@ = 200;

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

int@H_450_33@ s@H_450_33@ = func@H_450_33@();

}

// 3.@H_450_33@捕获列表,有引用和传值两种方式,传值不可以改变,引用可以改变,并且改变外部的变量值@H_450_33@

{

int@H_450_33@ p@H_450_33@ = 100,&q@H_450_33@]{q@H_450_33@++;return@H_450_33@ p@H_450_33@ + q@H_450_33@; };

int@H_450_33@ s@H_450_33@ = func@H_450_33@();

}

//4.@H_450_33@捕获列表,可以定义mutable@H_450_33@类型的lambada,能改变传值的捕获参数,

//@H_450_33@但是不能改变外部的变量值@H_450_33@

{

int@H_450_33@ p@H_450_33@ = 100,q@H_450_33@]()@H_719_32@mutable@H_450_33@{p@H_450_33@++;q@H_450_33@++; return@H_450_33@ p@H_450_33@ + q@H_450_33@; };

int@H_450_33@ s@H_450_33@ = func@H_450_33@();

"p = %d,q = %d,s = %d"@H_450_33@,p@H_450_33@,q@H_450_33@,s@H_450_33@);

}

//5.@H_450_33@捕获列表,可以用=@H_450_33@或者&捕获所有变量,=指传值,&表示引用

{

int@H_450_33@ p@H_450_33@ = 100,q@H_450_33@ = 200;

//@H_450_33@用&@H_450_33@的时候,所有的都可以调用了,[&,p]:表示除了p不能被使用,其它的都可以被使用

auto@H_450_33@ func@H_450_33@ = [&]{

return@H_450_33@ p@H_450_33@ + q@H_450_33@;

};

}

//@H_450_33@稍微复杂点的lambda@H_450_33@表达式

{

auto@H_450_33@ add@H_450_33@ = [](int@H_450_33@ v1@H_450_33@,int@H_450_33@ v2@H_450_33@){return@H_450_33@v1@H_450_33@ + v2@H_450_33@; };

auto@H_450_33@ a@H_450_33@ = add@H_450_33@(1,2);

}

//@H_450_33@小括号中的是参数列表,参数列表和捕获列表区别在于,参数列表的参数由调用方决定,@H_450_33@

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

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

{

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

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

}

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

{

auto@H_450_33@ func@H_450_33@ = [](){};

}

return@H_450_33@ true@H_450_33@;

}

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

#include@H_450_33@ init@H_450_33@();

//std::function;@H_450_33@

//std::bind@H_450_33@

//@H_450_33@函数指针类型@H_450_33@

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

func@H_450_33@();

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

{

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

void@H_450_33@(T01CPP11@H_450_33@::*FuncPtr@H_450_33@)() = &T01CPP11@H_450_33@::@H_818_62@mFoo@H_450_33@;

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

(this@H_450_33@->*FuncPtr@H_450_33@)();

}

//bind@H_450_33@的功能,就是把一个具体函数,编程std::function@H_450_33@对象

//bind@H_450_33@可以把具体函数和std::function@H_450_33@形式完全改变,比如参数数量的改变

{

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

func@H_450_33@();

}

//@H_450_33@也可以改变参数顺序@H_450_33@

{

//@H_450_33@其中@H_450_33@

//_1@H_450_33@:表示function<void(float,char,int)>@H_450_33@括号中的第一个参数

//_2:@H_450_33@表示function<void(float,int)>@H_450_33@括号中的第二个参数

//_3:@H_450_33@表示function<void(float,int)>@H_450_33@括号中的第三个参数

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

function@H_450_33@<void@H_450_33@(float@H_450_33@,char@H_450_33@,int@H_450_33@)> func@H_450_33@ = std@H_450_33@:::rgb(136,

placeholders@H_450_33@::_3@H_450_33@,133)">placeholders@H_450_33@::_2@H_450_33@,133)">placeholders@H_450_33@::_1@H_450_33@);

func@H_450_33@(1.0f,21)"> 'd'@H_450_33@,2000);

}

// @H_450_33@也可以同时改变参数个数和顺序@H_450_33@

{

:rgb(33,char@H_450_33@)> func@H_450_33@ = :rgb(33,

100,133)">placeholders@H_450_33@::_1@H_450_33@);

func@H_450_33@(4.0f,21)"> 'x'@H_450_33@);

}

//@H_450_33@也可以绑定成员函数@H_450_33@

{

bind@H_450_33@(&@H_221_250@mFoo@H_450_33@,this@H_450_33@);

func@H_450_33@();

}


//@H_450_33@下面的运行结果是:lambada is called@H_450_33@

{

function@H_450_33@<void@H_450_33@()> func@H_450_33@ = [](){};

function@H_450_33@<void@H_450_33@(int@H_450_33@)> func1@H_450_33@ = bind@H_450_33@([](int@H_450_33@,int@H_450_33@){

"lambada iscalled"@H_450_33@);

},10,133)">placeholders@H_450_33@::_1@H_450_33@);

func1@H_450_33@(100);

}


return@H_450_33@ true@H_450_33@;

}

修改AppDelegate.cpp

A添加头文件:

#include@H_450_33@ "TBACk.h"@H_450_33@

B:修改:applicationDidFinishLaunching@H_450_33@()@H_450_33@截图如下:@H_450_33@

@H_450_33@

大佬总结

以上是大佬教程为你收集整理的2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用全部内容,希望文章能够帮你解决2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。