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


本章的代码例子: 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();
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜甲同学

感谢打赏,我会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值