您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x 捕鱼达人游戏学习教程(2)--动态数据模型的创建

2013-07-04 17:24 555 查看
本章的代码例子: http://vdisk.weibo.com/s/IxHyL

使用上篇文章的代码

现在实现动态数据的模型FishingJoyData继承自CCObject

FishingJoyData.h代码如下:

#include "cocos2d.h"

using namespace cocos2d;

class FishingJoyData:public CCObject
{
    
public:
    //创建单例的方法
    static FishingJoyData* sharedFishingJoyData();
    //金币的数量
    CC_SYNTHESIZE(int, _gold, Glod);
    //开始
    CC_SYNTHESIZE(bool, _isBeginner, IsBeginner);
    //音量值
    CC_SYNTHESIZE(float, _soundVolume, SoundVolume);
    CC_SYNTHESIZE(float, _musicVolume, MusicVolume);
    
    
    //内存不足时调用
    void purge();
    
    //将数据从内存保存到外部文件,即写入到本地
    void flush();
    
    //对Glod进行操作,delta的值正负都可以
    void alterGold(int delta);
    
    
    //重置游戏数据为默认值
    void reset();
    
    
protected:
    FishingJoyData();
    ~FishingJoyData();
    
    bool init();
    
};


FishingJoyData.cpp

#include "FishingJoyData.h"
#include "StaticData.h"
//为方法我们定义一个宏CCUD减少代码量
#define CCUD CCUserDefault::sharedUserDefault()
//初始化一个单例
static FishingJoyData* _sharedFishingJoyData = NULL;
FishingJoyData* FishingJoyData::sharedFishingJoyData()
{
    if (_sharedFishingJoyData == NULL)
    {
        _sharedFishingJoyData = new FishingJoyData();
        _sharedFishingJoyData->init();
    }
    return _sharedFishingJoyData;
}


void FishingJoyData::purge()
{
    //CC_SAFE_RELEASE_NULL使用release()方法释放Cocos2d-x对象p的一次引用,再把p赋值为NULL。如果p已经为NULL,则不进行操作
    CC_SAFE_RELEASE_NULL(_sharedFishingJoyData);
}


FishingJoyData::FishingJoyData()
{
    
}

FishingJoyData::~FishingJoyData()
{
    //将数据写入本地的方法,这个方法是为了实现自动保存,析构函数的方法是在这个类被释放前调用的
    this->flush();
}


bool FishingJoyData::init()
{
    _isBeginner = CCUserDefault::sharedUserDefault()->getBoolForKey("beginner");
    if (_isBeginner)
    {
        //初始化时先重置
        this->reset();
        //保存初始化之后的数据
        this->flush();
        //初始化一次之后,只要不重置就用再初始化了
        this->setIsBeginner(false);
    }
    else
    {
        _isBeginner = CCUD->getBoolForKey("beginner");
        _soundVolume = CCUD->getFloatForKey("sound");
        _musicVolume = CCUD->getFloatForKey("music");
        _gold = CCUD->getIntegerForKey("gold");
        //purgeSharedUserDefault()方法的意思是将CCUserDefault::sharedUserDefault()这个系统提供存放数据的单例类释放掉
        CCUD->purgeSharedUserDefault();
    }
    return true;
}


void FishingJoyData::reset()
{
    //STATIC_DATA_INT这个宏定义是定义在StaticData类中
    int gold = STATIC_DATA_INT("default_gold");
    this->setGlod(gold);
    this->setIsBeginner(true);
    this->setMusicVolume(1);
    this->setSoundVolume(1);
    //将以上数据初始化以后调本类中的保存数据的方法
    this->flush();
}
//设置金币的值
void FishingJoyData::alterGold(int delta)
{
    this->setGlod(this->getGlod() + delta);
}


void FishingJoyData::flush()
{
    //以上在reset()方法中重新设置了以下参数的值,所以再次调用时就会被重新初始化
    CCUD->setFloatForKey("sound", this->getSoundVolume());
    CCUD->setBoolForKey("beginner", this->getIsBeginner());
    CCUD->setIntegerForKey("gold", this->getGlod());
    CCUD->setFloatForKey("music", this->getMusicVolume());

    //这里大家可能会有一个疑问为什么先调用flush()保存之后再调用purgeSharedUserDefault()方法删除呢?
    //因为flush()方法可以将程序中缓存的数据写入本地的plist文件中,这个文件的储存的路径是有系统提供的。
    CCUD->flush();
    
     //purgeSharedUserDefault()是将程序中缓存的数据删除,不会删除用flush()方法写入到本地的数据
    CCUD->purgeSharedUserDefault();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐