国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

cocos2dx 函數(shù)作為參數(shù)進(jìn)行傳遞和調(diào)用(std::function跟CC_CALLBACK_1的使用)

2019-11-09 16:32:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文主要實(shí)現(xiàn)的功能為:  把函數(shù)當(dāng)做形參進(jìn)行傳遞,并且調(diào)用。

步驟如下:

1:首先聲明一個(gè)函數(shù)指針   函數(shù)原型為   void 函數(shù)名(string str) 無(wú)返回值,一個(gè)string參數(shù)

typedef std::function<void(string str)> httPRequest_SuccessOrFail_callback;

2:聲明2個(gè)回調(diào)函數(shù)

httpRequest_SuccessOrFail_callback m_success_callback = nullptr;httpRequest_SuccessOrFail_callback m_fail_callback = nullptr;

3:在符合條件的時(shí)候調(diào)用回調(diào)函數(shù)

this->m_success_callback("test success");

this->m_fail_callback("test error"); 

4:把實(shí)參(實(shí)參為函數(shù))傳遞給形參

(1)形參聲明:

void connectServer(const char* address, const char* postData, bool isSetHeader,const httpRequest_SuccessOrFail_callback &successCallback, const httpRequest_SuccessOrFail_callback &failCallback);

(2)實(shí)參傳遞給形參

callback1->connectServer(url.c_str(), "", false,CC_CALLBACK_1(HelloWorld::successCallBack, this), CC_CALLBACK_1(HelloWorld::failCallBack, this));

參考鏈接:

http://www.gimoo.net/t/1504/55278beacb9af.html

http://blog.csdn.net/dawn_moon/article/details/8546607

----------------------------------------------------------------------------------------------------------------------------------------------------------

下面附上完整的demo,一共兩個(gè)類(結(jié)合cocos的httpclient進(jìn)行的測(cè)試,在聯(lián)網(wǎng)成功或者失敗后,調(diào)用不同的回調(diào)函數(shù))

1:形參類的頭文件

#pragma once#ifndef _TESTSTDBIND_H_#define _TESTSTDBIND_H_#include <functional>using namespace std;#include "cocos2d.h"#include "network/HttpClient.h"#include "network/HttpResponse.h"#include "string"USING_NS_CC;using namespace network;/*	date:2017.02.07*/////定義成員函數(shù)指針  //typedef void (cocos2d::Ref::*SELF_CallBack)();//#define m_callFunc_selector(_SELECTOR) (SELF_CallBack)(&_SELECTOR)  //把m_call(方法的全名為---類名:函數(shù)名)   括號(hào)中的取地址,然后強(qiáng)轉(zhuǎn)//typedef std::function<void(HttpClient* client, HttpResponse* response)> ccHttpRequestCallback;//typedef void (cocos2d::Ref::*SEL_HttpResponse)(HttpClient* client, HttpResponse* response);//#define httpresponse_selector(_SELECTOR) (cocos2d::network::SEL_HttpResponse)(&_SELECTOR) //(cocos2d::network::)為強(qiáng)制轉(zhuǎn)換typedef std::function<void(string str)> httpRequest_SuccessOrFail_callback;class TestStdBind : public Layer{public:	TestStdBind();	~TestStdBind();	CREATE_FUNC(TestStdBind);	virtual bool init() override;public:	//void connectServer(const char* address, const char* postData, bool isSetHeader, 	//	std::function<void()> successCallback, std::function<void()> failCallback);	////void connectServer(const char* address, const char* postData, bool isSetHeader,	////	SELF_CallBack successCallback, SELF_CallBack failCallback);	void connectServer(const char* address, const char* postData, bool isSetHeader,		const httpRequest_SuccessOrFail_callback &successCallback, const httpRequest_SuccessOrFail_callback &failCallback);	//Http Response Callback	void onHttpRequestCompleted(HttpClient *sender, HttpResponse *response1);	//server端返回來(lái)的數(shù)據(jù)	string httpServerData = "error";private:	//std::function<void()> m_success_callback;	//std::function<void()> m_fail_callback;	////SELF_CallBack m_success_callback;	////SELF_CallBack m_fail_callback;	httpRequest_SuccessOrFail_callback m_success_callback = nullptr;	httpRequest_SuccessOrFail_callback m_fail_callback = nullptr;};#endif

2:形參類的實(shí)現(xiàn)文件

#include "TestStdBind.h"#include "json/forwards.h"#include "json/value.h"#include "json/writer.h"#include "network/HttpClient.h"#include "network/HttpResponse.h"#include "json/reader.h"#include "CommonDefine.h"#include "Utils/JsonUtils.h"#pragma execution_character_set("utf-8")using namespace network;TestStdBind::TestStdBind(){}TestStdBind::~TestStdBind(){	HttpClient::destroyInstance();}bool TestStdBind::init(){	if (!Layer::init())	{		return false;	}	return true;}void TestStdBind::connectServer(const char* address, const char* postData, bool isSetHeader,	const httpRequest_SuccessOrFail_callback &successCallback,const httpRequest_SuccessOrFail_callback &failCallback){	this->m_success_callback = successCallback;	this->m_fail_callback = failCallback;	HttpRequest* request = new (std::nothrow) HttpRequest();	request->setUrl(address);	request->setRequestType(HttpRequest::Type::POST);	request->setResponseCallback(this, httpresponse_selector(TestStdBind::onHttpRequestCompleted));	if (isSetHeader)	{		std::vector<std::string> headers;		headers.push_back("Content-Type: application/json; charset=utf-8");		request->setHeaders(headers);	}	request->setRequestData(postData, strlen(postData));	//log("requestURL %s    postStr  %s", request->getUrl(), postData);	request->setTag("Post_My_Data");	cocos2d::network::HttpClient::getInstance()->setTimeoutForConnect(JsonUtils::getFloatFromJson("httpConnectTimeOut"));	cocos2d::network::HttpClient::getInstance()->setTimeoutForRead(JsonUtils::getFloatFromJson("httpReadTimeOut"));	HttpClient::getInstance()->send(request);	request->release();}void TestStdBind::onHttpRequestCompleted(HttpClient *sender, HttpResponse *response1){	HttpResponse *response = response1;	if (!response || !response->isSucceed())	{		log("error buffer:%s", response->getErrorBuffer());		this->m_fail_callback("test fail");		return;	}	vector<char> *buffer = response->getResponseData();	string result(buffer->begin(), buffer->end());	log("MyHttpPost::onHttpRequestCompleted  服務(wù)器返回的數(shù)據(jù): %s", result.c_str());	//接收服務(wù)端返回來(lái)的數(shù)據(jù)	this->httpServerData = result;	//(this->*m_success_callback)();//"success"		//實(shí)際調(diào)用	this->m_success_callback("test success");}

3:實(shí)參類的頭文件

#pragma once#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"#include "Scene/httpInterface/MyHttpPost.h"#include "TestStdBind.h"/*	@date : 2016.10.12*/class HelloWorld : public cocos2d::Layer{public:    // there's no 'id' in cpp, so we recommend returning the class instance pointer    static cocos2d::Scene* createScene();    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone    virtual bool init();    // implement the "static create()" method manually    CREATE_FUNC(HelloWorld);private:	void testCallBack();	void successCallBack(string str);	void failCallBack(string str);private:	TestStdBind* callback1 = nullptr;};#endif // __HELLOWORLD_SCENE_H__

4:實(shí)參類的實(shí)現(xiàn)文件

#include "HelloWorldScene.h"#include "Scene/httpInterface/MyHttpPost.h"#include "update/HttpClientDownLoadAPK.h"#include "CommonDefine.h"#include "Scene/LogoScene.h"#include "update/AssetsManagerResource.h"#include "TestStdBind.h"#include "Utils/JsonUtils.h"#include "Data/GameManager.h"USING_NS_CC;#pragma execution_character_set("utf-8")Scene* HelloWorld::createScene(){    auto scene = Scene::create();    auto layer = HelloWorld::create();    scene->addChild(layer);    return scene;}bool HelloWorld::init(){    if ( !Layer::init() )    {        return false;    }    	this->testCallBack();	return true;}void HelloWorld::testAES(){}void HelloWorld::testCallBack(){	callback1 = TestStdBind::create();	std::string url = StringUtils::format("%s/gm-web/app/ask/update/%s/%s",		JsonUtils::getStringFromJson("serverURL").c_str(),		GameManager::getInstance()->getAppName().c_str(),		UserDefault::getInstance()->getStringForKey(ResourcesVersion,"1.0.0").c_str());	this->addChild(callback1);	 	//callback1->connectServer(url.c_str(), "", false, [=](){	//	//log("返回成功111 %s ==", callback1->httpServerData.c_str());	//}, [=](){	//	log("返回失敗111 %s ==", callback1->httpServerData.c_str());	//});	callback1->connectServer(url.c_str(), "", false,		CC_CALLBACK_1(HelloWorld::successCallBack, this), CC_CALLBACK_1(HelloWorld::failCallBack, this));}void HelloWorld::successCallBack(string str){	log("%s",str.c_str());	log("返回成功222 %s ==", callback1->httpServerData.c_str());}void HelloWorld::failCallBack(string str){	log("%s", str.c_str());	log("返回失敗222 %s ==", callback1->httpServerData.c_str());}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 墨脱县| 通河县| 万源市| 濮阳市| 昆明市| 奉贤区| 大冶市| 耿马| 长葛市| 玉溪市| 旺苍县| 谢通门县| 故城县| 绍兴县| 遵义县| 南平市| 盖州市| 广元市| 海伦市| 西畴县| 新野县| 黄陵县| 莒南县| 麟游县| 石景山区| 禹城市| 舒城县| 新邵县| 南华县| 澄江县| 安远县| 诸城市| 莱州市| 岱山县| 彭泽县| 巫山县| 都江堰市| 克拉玛依市| 纳雍县| 庄浪县| 阿拉善右旗|