cocos2dx 使用plist保存账号信息

大笑这是本人的上课笔记,刚学的cocos2dx,请不要在意质量。。。


================================================.h====================================

#ifndef __TestHero__login__

#define __TestHero__login__


#include "cocos2d.h"

#include "cocos-ext.h"

USING_NS_CC_EXT;

USING_NS_CC;


class login:publicCCLayer,publicCCIMEDelegate,publicCCTextFieldDelegate,publicCCEditBoxDelegate

{

public:

    CCEditBox *userName_editBox;

    CCEditBox *passWord_editBox;

   

   

   virtual bool init();

   static CCScene *scene();


  /*使用两种方法来存储*/   


    //使用plist存储

   void initByPlist();

   void plistInGame();

   void plistInGame2();

   void haveUserPass();

    

    //使用CCUserDefault存储

   void initByDefault();

   void inGame();

   void inGame2();

   void havemima();

    

  

    //退出游戏

   void getout();

    

   

    //设置键盘return内容

   virtual void editBoxReturn(CCEditBox* editBox);



    

    //CREATE_FUNC(login);因为继承了CCEditBoxDelegate后,login成为了一个抽象类

    //所以不能用宏来new

    

   //写一个new精灵的静态函数

   static login* create();

    

};



#endif

=========================================.cpp=================================


#include "login.h"

#include "Scend.h"

#include "string.h"

#include "publicUtile.h"

boollogin::init()

{

   if(CCLayer::init())

    {


        //设置输入编辑框的大小

       CCSize editSize = CCSizeMake(265, 35);

        //new一个精灵

       CCSprite *loginImgK = CCSprite::create("HelloWorld.png");

       //通过导演来获得层的尺寸

       CCSize size = CCDirector::sharedDirector()->getWinSize();

        //设置精灵在层中的位置

        loginImgK->setPosition(ccp(size.width/2, size.height/2));

       //设置精灵的比例放大倍数

        loginImgK->setScale(1.9);

        //将精灵添加进入层,3ZOrder值,555tag

       this->addChild(loginImgK,3, 555);


  

       //第一个size参数表示输入编辑框的大小,第二个参数九宫格是用于输入编辑框的背景

        userName_editBox =CCEditBox::create(editSize,CCScale9Sprite::create("123.png"));

       //通过获得loginimgk的尺寸来确定编辑框的位置,因为编辑框是放在loginimgk精灵层上的

       float x = loginImgK->getContentSize().width/2;

       float y = loginImgK->getContentSize().height/2;

        userName_editBox->cocos2d::CCNode::setPosition(ccp(x,y+40));

       //setFont开头的有几个方法是用于设置输入文字的字体,大小,颜色

        userName_editBox->setFontSize(25);

        userName_editBox->setFontColor(ccRED);

       //设置输入编辑框在还没有输入的时候默认的提示文字

        userName_editBox->setPlaceHolder("username:");

       //同样的,也有几个对应的方法的是用于设置这些提示文字的,都是以setPlaceHolder开头的

        userName_editBox->setPlaceholderFontColor(ccBLACK);

       //设置输入编辑文字的长度,一个字符为一个长度

        userName_editBox->setMaxLength(20);

        //设置键盘中return键显示的字符

        userName_editBox->setReturnType(kKeyboardReturnTypeDone);


        userName_editBox->setInputMode(kEditBoxInputModeAny);

       //包括这些选项

        //      kEditBoxInputModeAny:        开启任何文本的输入键盘,包括换行

        //      kEditBoxInputModeEmailAddr:  开启 邮件地址 输入类型键盘

        //      kEditBoxInputModeNumeric:    开启 数字符号 输入类型键盘

        //      kEditBoxInputModePhoneNumber:开启 电话号码 输入类型键盘

        //      kEditBoxInputModeUrl:        开启 URL 输入类型键盘

        //      kEditBoxInputModeDecimal:    开启 数字 输入类型键盘,允许小数点

        //      kEditBoxInputModeSingleLine: 开启任何文本的输入键盘,不包括换行

       //设置委托代理对象为当前类

        userName_editBox->setDelegate(this);

        loginImgK->addChild(userName_editBox);

        

        /********************** password *****************************/

        

        //CCSize editSize = CCSizeMake(265, 35);

       //第一个size参数表示输入编辑框的大小,第二个参数九宫格是用于输入编辑框的背景

        passWord_editBox =CCEditBox::create(editSize,CCScale9Sprite::create("123.png"));

        //passWord_editBox->setAnchorPoint(ccp(0,0));

        //float y = CCDirector::sharedDirector()->getWinSize().height * 0.3156;

       //设置

        passWord_editBox->cocos2d::CCNode::setPosition(x,y-40);

       //setFont开头的有几个方法是用于设置输入文字的字体,大小,颜色

        passWord_editBox->setFontSize(25);

        passWord_editBox->setFontColor(ccRED);

       //设置输入编辑框在还没有输入的时候默认的提示文字

        passWord_editBox->setPlaceHolder("password: ");

       //同样的,也有几个对应的方法的是用于设置这些提示文字的,都是以setPlaceHolder开头的

        passWord_editBox->setPlaceholderFontColor(ccBLACK);

       //设置输入编辑文字的长度,一个字符为一个长度

        passWord_editBox->setMaxLength(20);

        //设置键盘中return键显示的字符

        passWord_editBox->setReturnType(kKeyboardReturnTypeGo);

        //设置该属性输入password时为替代符

        passWord_editBox->setInputFlag(kEditBoxInputFlagPassword); //如果只是简单输入字符,则不用这个设置

       //包括这些选项

        //    kEditBoxInputFlagPassword,

        //    kEditBoxInputFlagSensitive,

        //    kEditBoxInputFlagInitialCapsWord,

        //    kEditBoxInputFlagInitialCapsSentence,

        //    kEditBoxInputFlagInitialCapsAllCharacters

       //设置委托代理对象为当前类

        passWord_editBox->setDelegate(this);

        loginImgK->addChild(passWord_editBox);

        

        


        //使用CCUserDefault存储

        //initByDefault();

        

        //使用plist存储

       initByPlist();

        

       //设置文字菜单

        CCMenuItemFont *font = CCMenuItemFont::create("进入游戏",this, menu_selector(login::plistInGame));

        //改变文字的颜色

        font->setColor(ccBLACK);

        font->setScale(0.5);

       //设置文字菜单

        CCMenuItemFont *font1 = CCMenuItemFont::create("记住账密",this, menu_selector(login::haveUserPass));

        //改变文字的颜色

        font1->setColor(ccBLACK);

        font1->setScale(0.5);

        CCMenuItemFont *font2 = CCMenuItemFont::create("离开游戏",this, menu_selector(login::getout));

        font2->setColor(ccRED);


        //new一个菜单

       CCMenu *m = CCMenu::create(font,font1,font2,NULL);

       //调整菜单里几个菜单的之间的距离和方向

        m->alignItemsHorizontallyWithPadding(50);

        //设置菜单在loginImgk层里的位置

        m->cocos2d::CCNode::setPosition(x+30,y-140);

        //将菜单添加进入loginimgk精灵层

        loginImgK->addChild(m);

        

       return true;

    }

    returnfalse;

}



//键盘return

voidlogin::editBoxReturn(CCEditBox* editBox)

{

    //inGame2();

    plistInGame2();

}



/*************************************************************/

//使用plist来存储

voidlogin::initByPlist()

{

    

    CCDictionary *dict =publicUtile::getDictionayFromFile("hehehe.plist");

   //设置编辑框内的账号显示

    userName_editBox->setText(((CCString*)dict->objectForKey("userName"))->getCString());

   //设置编辑框内的密码显示

    passWord_editBox->setText(((CCString*)dict->objectForKey("passWord"))->getCString());

   //释放掉dict单太类里添加的生命

    dict->release();

    

}


voidlogin::haveUserPass()

{

    

   //获得文件操作对象

    CCFileUtils *file =CCFileUtils::sharedFileUtils();

    //获得Document的路径

   const char *spath = file->getWritablePath().c_str();

    //从路径中,取出plist文件

   const char *path = file->fullPathFromRelativeFile("hehehe.plist", spath);

   //根据指定路径中有plist生成字典对象

    CCDictionary *dict =CCDictionary::createWithContentsOfFile(path);

    

   //获得账密编辑框内的 输入

   const char *userName =userName_editBox->getText();

   const char *passWord =passWord_editBox->getText();

    

   //修改key中的值,如果没有此key,则创建一个新的

    dict->setObject(CCString::create(userName),"userName");

    dict->setObject(CCString::create(passWord),"passWord");

   //把当前这个字典对象,重新写入到指定路径的plist中去

    dict->writeToFile(path);



}

voidlogin::plistInGame()

{

    

   //根据指定路径中有plist生成字典对象

    CCDictionary *dict =publicUtile::getDictionayFromFile("hehehe.plist");

   //获得账密编辑框内的 输入

   const char *name =userName_editBox->getText();

   const char *pass =passWord_editBox->getText();

    //通过key获得字典plist内保存的账密

   const char *username = ((CCString*)dict->objectForKey("userName"))->getCString();

   const char *password = ((CCString*)dict->objectForKey("passWord"))->getCString();

   //进行判断,如果输入的账密和plist内的相同

   if(strcmp(name, username)==0 &&strcmp(pass, password)==0)

    {

       //进行场景切换

       CCScene *sc = Scend::scene();

        CCDirector::sharedDirector()->replaceScene(sc);

    }

   else

    {

        CCMessageBox("usernamepassword有误","请重新输入");

    }

    

    

}

voidlogin::plistInGame2()

{

   //根据指定路径中有plist生成字典对象

    CCDictionary *dict =publicUtile::getDictionayFromFile("hehehe.plist");

   const char *name =userName_editBox->getText();

   const char *pass =passWord_editBox->getText();

    

   if(strcmp(name, ((CCString*)dict->objectForKey("userName"))->getCString())==0 && strcmp(pass, ((CCString*)dict->objectForKey("passWord"))->getCString())==0)

    {

       CCScene *sc = Scend::scene();

        CCDirector::sharedDirector()->replaceScene(sc);

    }

   else

    {

        

    }


}





/*************************************************************/






//使用CCUserDefault存储

voidlogin::initByDefault()

{

    //cocos2dx自带账密存储池

    CCUserDefault *data =CCUserDefault::sharedUserDefault();

   //设置输入编辑框里记住账密后的账号显示

    userName_editBox->setText(data->getStringForKey("username").c_str());

   //设置输入编辑框里记住账密后的密码显示

    passWord_editBox->setText(data->getStringForKey("password").c_str());

    

    

}


voidlogin::inGame()

{

    //cocos2dx自带账密存储池

    CCUserDefault *data =CCUserDefault::sharedUserDefault();

   //获取账密编辑框输入的内容

   const char *name =userName_editBox->getText();

   const char *pass =passWord_editBox->getText();

    

  if(strcmp(name, data->getStringForKey("username").c_str())==0 && strcmp(pass, data->getStringForKey("password").c_str())==0)

   {

       CCScene *sc = Scend::scene();

        CCDirector::sharedDirector()->replaceScene(sc);

   }

   else

   {

       CCMessageBox("usernamepassword有误","请重新输入");

   }


}


voidlogin::inGame2()

{

    CCUserDefault *data =CCUserDefault::sharedUserDefault();

   const char *name =userName_editBox->getText();

   const char *pass =passWord_editBox->getText();

   if(strcmp(name, data->getStringForKey("username").c_str())==0 && strcmp(pass, data->getStringForKey("password").c_str())==0)

    {

       CCScene *sc = Scend::scene();

        CCDirector::sharedDirector()->replaceScene(sc);

    }

   else

    {

            }

}



voidlogin::havemima()

{

    //cocos2dx自带账密存储池

    CCUserDefault *data =CCUserDefault::sharedUserDefault();

   const char *name =userName_editBox->getText();

   const char *pass =passWord_editBox->getText();

   //key和内容添加进内存池中

    data->setStringForKey("username", name);

    data->setStringForKey("password", pass);

    data->flush();

    

    


    

}




/*************************************************************/



//写一个new精灵的静态函数

login *login::create()

{

   login *lo = newlogin();

   if(lo && lo->init())

    {

       return lo;

    }

   delete lo;

    lo =NULL;

    returnNULL;

}




//退出游戏

voidlogin::getout()

{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)

CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");

#else

    CCDirector::sharedDirector()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

   exit(0);

#endif

#endif

}



CCScene* login::scene()

{

   CCScene *sc = CCScene::create();

   login *lo = login::create();

    sc->addChild(lo);

   return sc;

}


==========================

写一个 CCFileUtils 单态类,方便使用

============================.h================

#ifndef __TestHero__publicUtile__

#define __TestHero__publicUtile__


#include "cocos2d.h"

USING_NS_CC;

class publicUtile

{

public:

    static CCDictionary* getDictionayFromFile(char *fileName);

    

    

};


#endif



===========================.cpp=====================

#include "publicUtile.h"


CCDictionary* publicUtile::getDictionayFromFile(char *fileName)

{

    //获得文件操作对象

    CCFileUtils *file = CCFileUtils::sharedFileUtils();

    //获得Document的路径

    const char *spath = file->getWritablePath().c_str();

    //从路径中,取出plist文件

    const char *path = file->fullPathFromRelativeFile(fileName, spath);

    //根据指定路径中有plist生成字典对象

    CCDictionary *dict = CCDictionary::createWithContentsOfFile(path);

    //防止dict在别的类调用的时候被释放,所以增加一条生命

    dict->retain();

    //返回dict

    return dict;

    

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值