【问题标题】:How to add a short pause (think time) in a cocos2d game如何在 cocos2d 游戏中添加短暂的暂停(思考时间)
【发布时间】:2012-11-27 12:31:36
【问题描述】:

我正在开发一款类似于跳棋的两人 iOS 游戏。我正在使用 cocos2d 制作这个游戏。

我希望玩家移动渲染和计算机移动渲染之间的思考时间为 0.5 秒,以模拟思考时间。

游戏的流程是使用 NSNotification 事件控制的,看起来像这样......

玩家(计算机或人类)提交动作 -> 棋盘添加新精灵 -> 游戏控制器更新当前玩家并要求他们提交动作。

我尝试在棋盘更新结束或游戏更新开始时添加 usleep(500000)。最终发生的是在棋盘更新中添加的精灵,对于人类玩家来说,直到电脑玩家提交他的动作后才会出现。所以游戏会等待 500 毫秒,然后更新两个动作。

有没有办法强制 CCLayer 在睡眠之前更新它的子精灵,或者有没有更好的方法来添加这个思考时间?

谢谢

【问题讨论】:

    标签: cocos2d-iphone sleep


    【解决方案1】:

    如果您计划在控制器中接收更新,您可以在 update:(ccTime)dt 函数中延迟时间。

    在你的 .h 中

    float _slipTime;
    

    在你的 .m 中

    // with other declaratives
    
    static float THINK_TIME=.5f;
    
    
    // last line before the stall
    
    
    _slipTime=0.f; 
    [self schedule:@selector(pauseForThink:)];
    
    
    -(void) pauseForThink:(ccTime) dt {
        _slipTime+=dt;
        if(_slipTime>THINK_TIME) {
            [self unschedule:@selector(pauseForThink:)];
            // trigger here whatever you wanted to accomplish after
            // the think pause.
        }
     }
    

    好的,这很简单,但会阻止主循环被阻塞(这就是你的睡眠会发生的事情)。以 60 FPS 运行时,pauseForThink 方法会被调用大约 30 次,cocos 在暂停期间会有 30 个绘制周期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多