这是本人的上课笔记,刚学的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);
//将精灵添加进入层,3为ZOrder值,555为tag值
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("username或password有误","请重新输入");
}
}
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("username或password有误","请重新输入");
}
}
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;
}