0

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

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

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

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

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

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

谢谢

4

1 回答 1

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 个绘制周期。

于 2012-11-27T01:59:40.627 回答