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 _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*){

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 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();

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);

pushScene(s);

}

});

menu->addChild(item);

item->setTag(1000 +i);

}

menu->alignItemsvertically();

// 触摸

auto ev = EventListenerTouchOneByOne::create();

#if 0

ev->onTouchBegan = [](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,133)">Event*){

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

};

_eventdispatcher->addEventListenerWithSceneGraPHPriority(ev,this);

return true;

}

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

{

return true;

}

编写:T01CPP11.h

#ifndef __T01CPP11_H__

#define __T01CPP11_H__

#include T01CPP11:public 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)

{

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

}

void mFoo()

{

"mFoo is called");

}

//关于lambda表达式

bool init();

{

auto func = []{return 1; };

int i = func();

"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]{q++;return p + q; };

int s = func();

}

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

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

{

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

int s = func();

"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 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形式完全改变,比如参数数量的改变

{

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

func();

}

//也可以改变参数顺序

{

//其中

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

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

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

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

function<void(float,char,int)> func = std:: placeholders::_3,133)">placeholders::_2,133)">placeholders::_1);

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

}

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

{

char)> func = 100,133)">placeholders::_1);

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

}

//也可以绑定成员函数

{

bind(&mFoo,this);

func();

}


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

{

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

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

"lambada iscalled");

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

func1(100);

}


return true;

}

修改AppDelegate.cpp

A添加头文件:

#include "TBack.h"

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

2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用的更多相关文章

  1. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  2. iOS &gt;&gt;块&gt;&gt;更改块外部的变量值

    我不是在处理一个Object并改变它,就像我的mString一样.我希望’center’属性的行为类似于myInt,因为它是直接访问的C结构,而不是指向对象的指针.我希望’backgroundColor’的行为类似于我的imstring,因为它是一个指向一个新对象的对象的指针,不是吗?

  3. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  4. ios – 使用附加字符串本地化Info.plist变量

    我正在尝试本地化应用程序的名称,同时仍然能够根据构建配置追加字符串.所以目前它被设置为:该设置定义为:通过这种方式,我们可以为应用程序添加后缀以用于不同的beta版本.问题是,当我们尝试本地化本地化的InfoPlist.strings中的应用程序显示名称时,就像这样我们覆盖存储在Info.plist中的值,并丢失后缀字符.这有什么好办法吗?

  5. iOS – 开始iOS教程 – 变量之前的下划线?

    这是正确的还是我做错了什么?

  6. ios – 静态计算变量被多次实例化

    我有一个日期格式化程序,我试图在UITableViewCell子类中创建一个单例,所以我创建了一个这样的计算属性:问题是我不止一次看到print语句,这意味着它不止一次被创建.我已经找到了其他方法,但我很想知道这里发生了什么.有任何想法吗?解决方法您的代码段相当于只获取属性,基本上它与以下内容相同:如果你只想运行一次,你应该像定义一个惰性属性一样定义它:

  7. ios – UIApplication.delegate必须仅在主线程中使用[复制]

    我应该在主调度中的viewControllers中声明这些)变量位置声明定义了它的范围.您需要确定这些变量的范围.您可以将它们声明为项目或应用程序级别(全局),类级别或特定此功能级别.如果要在其他ViewControllers中使用这些变量,则使用公共/开放/内部访问控制将其声明为全局或类级别.

  8. ios – 无法理解Objective-C块文档

    为什么localVariable“按价值使用?”>如果我在第二个例子中将__block存储类型添加到localVariable,我错误地假设该块关闭了变量,所以它将它保留在堆中直到块被释放?解决方法Howexactlyisoneexample“accessedbyreference”whiletheotheroneisaccessedbyvariable?self是当前正在执行找到块的方法的对象.强引用只是意味着对象的保留计数增加.IfIaddthe__blockstoragetypetolocalVar

  9. ios – 为BOOL变量编写getter和setter

    显然,使用obj-c,通常没有理由编写getter和setter(感谢有用的mr@synthesize).所以现在,需要做到这一点,我遇到了一个我不知道如何编写它们的问题.:p我敢肯定我可能不会以正确的方式解决我的问题–只是将我的对象子类化得更容易–但我正在尝试编写类别代码以添加属性,因为(在开头)它更快,因为我想学习如何在我的应用程序中使用类别代码.我有这个:我在setter中没有if查询就试过

  10. ios – 为什么不保留__block变量(在非ARC环境中)?

    我正在阅读__blockvariables上的文档,并考虑我使用__block的情况.对我来说,似乎我需要两种情况:>在块中使用时将变量标记为读写>在块内引用self时避免保留周期从表面上看,这两件事似乎并不相关.我认为__block变量没有被保留为更多的技巧我需要记住避免保留周期的特定用例.我想知道,为什么不能保留它们是否有更重要的建筑理由?

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部