cocos2dx 3D战斗类游戏制作:【一】——数据库之二

上一篇,做了数据库结构设计,这篇,简单说说在游戏中依靠数据库,调用产生一个场景。

很简单,加入一个LoadScene(),在Cocos载入一个Scene的时候,调用LoadScene()来载入场景所需的一切即可。

void GhostBox::LoadScene()
{
    //根据scene_id查询场景数据,并初始化场景
    map m;
    vector<map> vect = DBHelper::GetTable("select * from scene where scene_id=1");
    //log("sqlite-->GetTable returns %d row", vect.size());
    m = vect;
    //设定场景模型
    if (m"scene_3dm"] != ""&&m"scene_3dt"] != ""&&m"scene_3ds"] != "")
    {
        std::string fileName = m"scene_3dm"].c_str();
        auto sprite = Sprite3D::create(fileName);
        sprite->setTexture(m"scene_3dt"].c_str());
        sprite->setScale(atof(m"scene_3ds"].c_str()));
        _layer3D->addChild(sprite);
    }
    //设定场景光照
    if (m"lighta_r"] != ""&&m"lighta_g"] != ""&&m"lighta_b"] != "")
    {
        //散射光,颜色
        _ambientLight = AmbientLight::create(Color3B(atoi(m"lighta_r"].c_str()), atoi(m"lighta_g"].c_str()), atoi(m"lighta_b"].c_str())));
        _ambientLight->retain();
        _ambientLight->setEnabled(true);
        addChild(_ambientLight);
        _ambientLight->setCameraMask(2);
    }
    if (m"lightd_r"] != ""&&m"lightd_g"] != ""&&m"lightd_b"] != "")
    {
        //方向光源,方向/颜色
        _directionalLight = DirectionLight::create(Vec3(0.0f, 0.0f, -1.0f), Color3B(atoi(m"lightd_r"].c_str()), atoi(m"lightd_g"].c_str()), atoi(m"lightd_b"].c_str())));
        _directionalLight->retain();
        _directionalLight->setEnabled(true);
        addChild(_directionalLight);
        _directionalLight->setCameraMask(2);
    }
    //背景音乐
    if (m"scene_bgm"] != ""){
        // preload background music and effect
        //SimpleAudioEngine::getInstance()->preloadBackgroundMusic(m"scene_bgm"].c_str());
        //SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(0.1);
        //SimpleAudioEngine::getInstance()->playBackgroundMusic(m"scene_bgm"].c_str(), true);
    }
}


```


在这里,使用的数据库是Sqlite,数据库的查询用到网上随处可见的DBHelper类。自己去下载吧。


对应上面的代码,贴一下scene数据库相关的数据,一目了然,呵呵:


  




LoadScene之外,当然还要LoadBB,LoadBoss,Load一堆这个场景需要的东西,方法掌握了,其实也就很简单了,从数据库去查,在程序里面画出来就是了呗,对吧。

根据数据库Load了若干若干的东西后,场景画面展示如下:

  



也许有人说——为什么要用数据库呢?


当然,你可以把一个游戏的数据全部写死在程序里面,但是那样,当你要增加更多的关卡、boss、资源。。。。。。。的时候,你就要改程序。


而用数据库的实现,当你需要增加一个关卡的时候,你需要做的,仅仅是在scene里面增加一条记录,说明一下这个关卡,以及这个关卡需要用到的boss、资源等等信息,要升级游戏,开发公司甚至都不用干活,把添加数据的接口给运营公司,运营公司就可以一直配置数据,把游戏不断地丰富内容运营下去。



从长远来看,程序和数据的分离,带来的好处,不需要再多说什么吧?呵呵



本篇CSDN连接:http://blog.csdn.net/dark79/article/details/41483011

:867: 强大

:2::2::2::2::2::2:

您的文章已经被推荐到Cocos引擎中文官网,期待您更多精彩的内容~

呵呵,目测大家对非具体功能实现的代码都没什么话题似地,接下来要再写啥,有点找不到感觉:882:

强大。。。期待更多分享。

可以把整个项目share在github上么?

开源暂时不现实,呵呵,虽然是做着玩的项目,但是也有投资商在关注着甚至开了价码的,呵呵。

授人以渔吧。说说一些方法的构思和实现,其实比放几个特效小代码出来意义要大嘛:14:

楼主很强大的说~~~后续还会更新不?

会啊,这几天就更新一个,呵呵

我想问下楼主,如果用ini配置和数据库比的,数据库的优势是什么