1、在头文件中:
#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"
#include "Scene.h"
#include "libjson.h"
#include <string.h>
USING_NS_CC;
USING_NS_CC_EXT;
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
class LoginLayer:public CCLayer
{
public:
virtual bool init();
SCENE_FUNC(LoginLayer);
CREATE_FUNC(LoginLayer);
CCEditBox *edit1;
CCEditBox *edit;
//加入登录界面
void Login();
void LoginClick();
void RegisterClick();
//开关声音
void SoundOnOffClick(CCObject *sender);
bool isSoundOpen;
//链接服务器进行登录
void Request();
void OnHttpClick(CCHttpClient *client,CCHttpResponse *response);
// void PaseJson(const JSONNode & n);
void PaseJson(const JSONNode & n);
//警告框
void showAlert();
};
2、在实现文件中:#include "LoginLayer.h"
#include "ResigisterLayer.h"
#include "PaserJSon.h"
#include <string>
#include <vector>
#include <numeric>
bool LoginLayer::init()
{
if(!CCLayer::init())
{
return false;
}
isSoundOpen=false;
this->Login();
return true;
}
//加入登录界面
void LoginLayer::Login()
{
CCSize winSize=CCDirector::sharedDirector()->getWinSize();
CCSprite *s=CCSprite::create("loginbackground.png");
s->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(s);
CCScale9Sprite *scale1=CCScale9Sprite::create("denglu.png");
scale1->setScale(0.8);
scale1->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(scale1);
//用户名的标签
CCScale9Sprite *scale2=CCScale9Sprite::create("UserLabel.png");
scale2->setScale(1, 2);
scale2->setPosition(ccp(winSize.width/2-100,winSize.height/2+50));
this->addChild(scale2);
//密码标签
CCScale9Sprite *scale3=CCScale9Sprite::create("PassWord.png");
scale3->setScale(1, 2);
scale3->setPosition(ccp(winSize.width/2-100,winSize.height/2));
this->addChild(scale3);
//用户名输入框
CCScale9Sprite *scale4=CCScale9Sprite::create("UserNametextfield.png");
scale4->setPosition(ccp(winSize.width/2-50,winSize.height/2+50));
scale4->setPreferredSize(CCSizeMake(300, 100));
edit= CCEditBox::create(CCSizeMake(200,40), scale4);
edit->setPosition(ccp(winSize.width/2+50,winSize.height/2+50));
edit->setTag(1);
edit->setInputMode(kEditBoxInputModeAny);
edit->setPlaceHolder("请输入用户名:");
edit->setFontColor(ccc3(255, 0, 0));
this->addChild(edit);
//密码输入框
CCScale9Sprite *scale5=CCScale9Sprite::create("passwordtextfield.png");
scale5->setPosition(ccp(winSize.width/2+50,winSize.height/2));
scale5->setPreferredSize(CCSizeMake(300, 100));
edit1= CCEditBox::create(CCSizeMake(200,40), scale5);
edit1->setPosition(ccp(winSize.width/2+50,winSize.height/2));
edit->setTag(2);
edit1->setInputMode(kEditBoxInputModeAny);
edit1->setInputFlag(kEditBoxInputFlagPassword);
edit1->setPlaceHolder("请输入密码:");
edit1->setFontColor(ccc3(255, 0, 0));
this->addChild(edit1);
//添加按钮注册、登录
CCMenuItemImage *resgister=CCMenuItemImage::create("zhuce_button.png", "zhuce_button2.png", this, menu_selector( LoginLayer::RegisterClick));
resgister->setPosition(ccp(80,-50));
CCMenuItemImage *login=CCMenuItemImage::create("denglu_button.png", "denglu_button2.png", this, menu_selector( LoginLayer::LoginClick));
login->setPosition(ccp(-50,-50));
CCMenu *menu=CCMenu::create(resgister,login,NULL);
menu->setPosition(ccp(240,160));
this->addChild(menu);
//添加声音按钮
CCMenuItemImage *soundbtnOn=CCMenuItemImage::create("soundon.png", "soundon.png");
CCMenuItemImage *soundbtnOff=CCMenuItemImage::create("soundoff.png", "soundoff.png");
// soundbtn->setPosition(CCPointMake(-150,-100));
CCMenuItemToggle *toggle=CCMenuItemToggle::createWithTarget(this, menu_selector(LoginLayer::SoundOnOffClick),soundbtnOn,soundbtnOff,NULL);
toggle->setPosition(CCPointMake(0,0));
CCMenu *menu1=CCMenu::create(toggle,NULL);
menu1->setPosition(ccp(50,50));
this->addChild(menu1);
SimpleAudioEngine::sharedEngine()->playBackgroundMusic("yinyue.mp3", true);
}
void LoginLayer::LoginClick()
{
CCLog("denglu");
this->Request();
}
void LoginLayer::RegisterClick()
{
CCTransitionFadeDown *fadeDown=CCTransitionFadeDown::create(2, LoginLayer::scene());
CCDirector::sharedDirector()->replaceScene(fadeDown);
}
void LoginLayer::SoundOnOffClick(CCObject *sender)
{
if(isSoundOpen)
{
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
isSoundOpen=false;
}
else
{
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
isSoundOpen=true;
}
}
void LoginLayer:: Request()
{
CCString *username=CCString::create(edit->getText());
CCString *password=CCString::create(edit1->getText());
CCLog("%s---------------%s",username->getCString(),password->getCString());
CCHttpRequest *request1=new CCHttpRequest();
request1->setUrl("http://42.96.151.161:83/service/userlogin");
request1->setRequestType(CCHttpRequest::kHttpPost);
request1->setResponseCallback(this, httpresponse_selector(LoginLayer::OnHttpClick));
char data[100];
sprintf(data, "user_name=%s&user_password=%s",username->getCString(),password->getCString());
request1->setRequestData(data, strlen(data));
request1->setTag("PUST Test1");
CCHttpClient::getInstance()->send(request1);
//delete [] request1;
}
//request1->setResponseCallback(this, httpresponse_selector(LoginLayer::OnHttpClick));的回调函数
void LoginLayer::OnHttpClick(CCHttpClient *client,CCHttpResponse *response)
{
if(!response)
{
return;
}
if(0!=strlen(response->getHttpRequest()->getTag()))
{
CCLog("%s completed",response->getHttpRequest()->getTag());
}
int statusCode = response->getResponseCode();
char statusString[64] = {};
sprintf(statusString, "Http Status Code:%d, tag = %s",statusCode,response->getHttpRequest()->getTag());
if(!response->isSucceed())
{
CCLog("response failed");
CCLog("error buffer:%s",response->getErrorBuffer());
return;
}
std::vector<char>* buffer = response->getResponseData();
printf("Http Test ,dump data: ");
//得到string类型的数据
std::string sum=accumulate(buffer->begin(), buffer->end(), std::string(""));
const char *aString=sum.c_str();
for(unsigned int i = 0; i<buffer->size();i++)
{
printf("%c",(*buffer)[i]);
}
std::cout<<std::endl;
JSONNode n=libjson::parse(aString);
this->PaseJson(n);
}
//解析的函数 进行判断状态 为0还是1
void LoginLayer::PaseJson(const JSONNode & n)
{
JSONNode::const_iterator i=n.begin();
while (i !=n.end() )
{
if(i->type()==JSON_ARRAY || i->type()==JSON_NODE)
{
PaseJson(*i);
}
std::string node_name=i->name();
//方法一:
if( (strcmp(node_name.c_str(), "status"))==0 )
{
json_string node_value=i->as_string();
if((strcmp(node_value.c_str(), "1"))==0)
{
CCLog("登录成功");
}
}
//方法二:
// if(node_name=="status")
// {
// json_string status=i->as_string();
// if(status=="1")
// {
// CCLog("登录成功");
// }
// //std::cout<<status<<std::endl;
// }
++i;
}
}