传值回调
来源:互联网 发布:网络变压器厂招人吗 编辑:程序博客网 时间:2024/05/19 18:17
利用传值回调实现 自定义 修改背景图
效果图
C.h
#ifndef __C_H__#define __C_H__#include "cocos2d.h"#include "D.h"class C : public cocos2d::Layer{public:static cocos2d::Scene* createScene();//创建场景virtual bool init(); //初始化CREATE_FUNC(C);//创建层std::vector<std::string>v;//保存所有的自定义图片void changBg(std::string fileName);//变换背景cocos2d::Sprite *bg;//背景精灵void show(Ref* pSender);//点击按钮后显示 自定义个数的 子菜单};#endif
C.cpp
#include "C.h"USING_NS_CC;using namespace std;Scene* C::createScene()//创建场景{ auto scene = Scene::create(); auto layer = C::create(); scene->addChild(layer); return scene;}bool C::init(){//初始化 if (!Layer::init() ){return false;}//背景精灵bg = Sprite::create("HelloWorld.png");bg->setNormalizedPosition(Vec2(0.5,0.5));this->addChild(bg);//将自己定义的图片加进去 ,目前只 添加3个v.push_back("HelloWorld.png");v.push_back("CloseSelected2.png");v.push_back("item1.jpg");//点击这个按钮后出现上面的3个MenuItemFont *item = MenuItemFont::create("Show",CC_CALLBACK_1(C::show,this));Menu *menu = Menu::create(item,NULL);menu->setPosition(Point(900,600));//添加进当前层(C)中this->addChild(menu); return true;}//这个函数实现 创建 D层,显示 自定义个数的按钮void C::show(Ref* pSender){D *ml = D::create(v,std::bind(&C::changBg,this,std::placeholders::_1));this->addChild(ml);}//改变背景的函数 回调的这个函数void C::changBg(std::string fileName){//通过图片名字更改背景bg->setTexture(fileName);}
D.h
#ifndef __D_H_#define __D_H_#include "cocos2d.h"using namespace cocos2d;class D:public Layer{public://初始化virtual bool init(std::vector<std::string> v,std::function<void (std::string)>m);//重写D的create方法,实现自定义创建static D *create(std::vector<std::string> v,std::function<void (std::string)>m);std::function<void (std::string)> back;//接收C传过来的 函数的地址void call(Ref *obj);//};#endif
D.cpp
#include "D.h"bool D::init(std::vector<std::string> v,std::function<void (std::string)>m){if(!Layer::init()){return false;}int i = 0;Menu *menu = Menu::create(NULL);//遍历穿过来的 vector集合,然后建立子菜单for (auto it = v.begin();it!=v.end();it++){std::string strName = *it;MenuItemFont *mif =MenuItemFont::create(strName,CC_CALLBACK_1(D::call,this));mif->setPosition(Point(100,100*i +50));mif->setName(strName);menu->addChild(mif);i++;}this->addChild(menu);return true;}//存放 图片名称的集合 std::string 类型 没有返回值的函数 形参是std::string 类型D * D::create(std::vector<std::string> v,std::function<void (std::string)>m){D *d = new D();if (d && d->init(v,m)){d->back = m;d->autorelease();return d;}CC_SAFE_DELETE(d);return NULL;}// 点击 任意一个 子菜单 回调这个方法 ,根据名字判断点击了哪个。void D::call(Ref *obj){MenuItemFont *mif= dynamic_cast<MenuItemFont *>(obj);std::string strName = mif->getName();back(strName.c_str());//c_str()输出格式}
0 0
- 传值回调
- (个人笔记)block的使用传值回调
- swift2.0 用闭包表达式 代替 protocol 传值回调
- 弹出层插件的编写-layer(跨iframe传值回调)
- 弹出层插件的编写-layer(跨iframe传值回调)
- Live555分析(一):VS2008编译
- Valid Sudoku and Sudoku Solver leetcode
- 程序员狂想曲
- Xcode: Delete row shortcut
- Android定时器:实现定时的几种方法
- 传值回调
- 目标跟踪的点跟踪技术(5)
- 关于RSA算法密钥长度/密文长度/明文长度
- php面向对象之-魔术方法__set__get__unset__isset的使用-126
- HDU-#1163 Eddy's digital Roots(九余数定理+同余)
- poj1061青蛙的约会(扩展欧几里得)
- 从学c++语言开始到能开发3D游戏需要看的书籍
- android-发短信代码实现
- java里面的小程序