#include "HelloWorldScene.h"
#include "CMessage.h"
#include "CCloud.h"
#include "curl/curl.h"
USING_NS_CC;
USING_NS_CC_EXT;
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
#define PRINT(i) printf("STU"#i"has %d money", student##i)
#define STA_BTN_EVT(name) void call_btn##name##Down(); \
void call_btn##name##Up();
#define DEV_BTN_EVT_DN(name) void call_btn##name##Down()
#define DEV_BTN_EVT_UP(name) void call_btn##name##Up()
DEV_BTN_EVT_DN(Start)
{
}
DEV_BTN_EVT_UP(Start)
{
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
//添加背景
CCSprite *sprite = CCSprite::create(m_rc.m_bg.filename.c_str());
sprite->setPosition(m_rc.m_bg.pos);
this->addChild(sprite);
//添加菜单
CCMenu *cityMenu = CCMenu::create();
cityMenu->setPosition(m_rc.m_cityMenu.pos);
this->addChild(cityMenu);
//添加按钮
addItemToMenu(cityMenu, &m_rc.m_mine, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_shop, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_workShop, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_bar, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_chooseGen, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_train, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_trade, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_inherit, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_genMap, menu_selector(HelloWorld::call_select));
addItemToMenu(cityMenu, &m_rc.m_shrine, menu_selector(HelloWorld::call_select));
CCloud::create(this);
return true;
}
//将menuItem添加到menu
void HelloWorld::addItemToMenu(CCMenu *menu, Stc_Node *node, SEL_MenuHandler handler)
{
CCMenuItemImage *item = CCMenuItemImage::create(node->filename.c_str(), node->filename.c_str());
item->setTag(node->tag);
item->setPosition(node->pos);
if(handler)
{
item->setTarget(this, handler);
}
menu->addChild(item);
}
//点击menuItem回调函数
void HelloWorld::call_select(CCObject *pSender)
{
CCMenuItemImage *item = dynamic_cast<CCMenuItemImage *>(pSender);
CCAssert(item, "item不能为空, call_select");
const char *cityName[10] = {"矿区", "商店", "玉石作坊", "酒馆", "点将台", "校场", "贸易中心", "传承塔", "名将图鉴", "战神殿"};
int index = item->getTag() - 101;
CCString *msg = CCString::createWithFormat("没有开启【%s】,尽请期待!", cityName[index]);
//CMessage::alert(this, msg->getCString());
testAsyNet();
}
//测试请求网络数据
void HelloWorld::testAsyNet()
{
CCHttpRequest *request = new CCHttpRequest();
switch (arc4random() % 3) {
case 0:
{
request->setUrl("http://www.baidu.com/img/bdlogo.gif");
request->setTag("Baidu");
}
break;
case 1:
{
request->setUrl("http://search.sina.com.cn/images/logo_new.png");
request->setTag("Sina");
}
break;
case 2:
{
request->setUrl("https://www.google.com.hk/images/srpr/logo11w.png");
request->setTag("Google");
}
break;
default:
return;
}
request->setRequestType(CCHttpRequest::kHttpGet);
request->setResponseCallback(this, (SEL_HttpResponse)(&HelloWorld::call_asyNet));
CCHttpClient::getInstance()->setTimeoutForConnect(30);
CCHttpClient::getInstance()->send(request);
request->release();
request = NULL;
}
void HelloWorld::call_asyNet(cocos2d::extension::CCHttpClient *sender, cocos2d::extension::CCHttpResponse *response)
{
// 判断是否响应成功
if (!response->isSucceed())
{
CCString *str = CCString::createWithFormat("请求失败, %s\n",response->getErrorBuffer());
CMessage::alert(this, str->getCString());
return ;
}
const char* tag = response->getHttpRequest()->getTag();
if (0 != strcmp("Google",tag) && 0 != strcmp("Baidu",tag) && 0 != strcmp("Sina",tag))
{
return;
}
std::vector<char> *v = response->getResponseData();
std::vector<char>::iterator itr = v->begin();
//将vector<char>转化为string
std::string str;
while (v->end() != itr) {
str.append(1, *itr);
++itr;
}
CCString *strMsg = CCString::createWithFormat("成功从%s请求图片\n", tag);
CMessage::alert(this, strMsg->getCString());
std::string picName = std::string(tag) + ".png";
std::string path = CCFileUtils::sharedFileUtils()->getWritablePath() + picName;
std::string buff(v->begin(),v->end());
//保存到本地文件
FILE *fp = fopen(path.c_str(), "wb+");
fwrite(buff.c_str(), 1, v->size(), fp);
fclose(fp);
CCSprite *sprite = CCSprite::create(path.c_str());
sprite->setPosition(ccp(winSize.width / 2.0 , winSize.height / 2.0));
this->addChild(sprite);
CCScaleBy *by = CCScaleBy::create(1.0, 0);
sprite->runAction(CCSequence::create(by, NULL));
}
//使用libCur请求网络. isSyn:是否同步请求
void HelloWorld::curlTestNet(bool isSyn)
{
if (isSyn)
{
//1.同步请求http,并且使用CURLOPT_FOLLOWLOCATION获取返回数据
CURL *curl = curl_easy_init();
CURLcode res;
if (curl) {
curl_easy_setopt(curl,CURLOPT_URL, "http://esample.com");
curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed:%s\n",curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
}
}
cocos2d-x 网络请求
最新推荐文章于 2023-11-17 09:59:55 发布