【cocos2dx】放置ゲームを作る際の時間の管理-part2

【cocos2dx】放置ゲームを作る際の時間の管理-part2
   

cocos2dxで、いわゆる「放置系」のゲームを作るにはどのように実装をすればいいのか、の第2回目です。
今回は、下記項目の2番目を勉強していきたいと思います。

  1. 同じCCScene、もしくはCCLayer上の時間の管理
  2. 別のCCScene、もしくはCCLayer上の時間の管理
  3. バックグラウンドに移動した時、またバックグラウンドから復帰した時の時間の管理
  4. アプリを停止した時、アプリを立ち上げた時の時間の管理

前回

【cocos2dx】放置ゲームを作る際の時間の管理-part1 | albatrus.com

別のCCScene、もしくはCCLayer上の時間の管理

前回は、同一のCCScene上での時間の管理を想定していましたが、今回はSceneやlayerを移動した場合にどうすればいいのかを考えます。

パターン1 – CCLayerの移動

CCLayerを移動させて画面を変える場合には、時間を管理するルート(Update)をCCSceneもしくは、移動しないCCLayerクラスで管理をします。
2014 3 10 2212


このように実装をすれば特別なことをしなくても大丈夫です。

パターン2 – CCSceneの移動

次は、CCSceneそのものを移動させる場合です。
2014 3 10 2d212


この場合は、ルート(Update)自体も無くなってしまうので、少し実装を変えてあげる必要があります。

実装

やりたいことは以下のようになります。
  1. シーンを移動する時に、時間を管理する値をアプリに記録する
  2. 新しいシーンで、記録した値を呼び出して、そこからルート(update)を利用する

ここで利用するのがonExit()メソッドとNSUserDefaultsです。

onExit()

onExit()は、CCScene・CCLayerが無くなる時に呼び出されるメソッドです。
シーンが移動するときにonExit()で値をNSUserDefaultsに記録させます。

float time;

void MyLayer::onExit(){
    
    CCLOG("onExit()");

    CCUserDefault *userDefalt = CCUserDefault::sharedUserDefault();
    userDefalt->setIntegerForKey("time", time);
    userDefalt ->flush();

}


後は、記録させた値を新しいシーンで呼び出してあげます。

    CCUserDefault *userDefalt = CCUserDefault::sharedUserDefault();
    int addTime = userDefalt->getIntegerForKey("time");

    
    time = time + addTime;


こうすれば、シーンは違いますが時間の経過に関しては計算ができます。

Related Posts Plugin for WordPress, Blogger...