我正在开发一款类似于跳棋的双人iOS游戏。我正在使用cocos2d创建这个游戏。
我希望玩家移动渲染和计算机移动渲染模拟思考时间之间的思考时间为.5秒。
使用NSNotification事件控制游戏流程,看起来像这样......
玩家(计算机或人类)提交移动 - >该板添加了新的精灵 - >游戏控制器更新当前玩家并要求他们提交动作。
我尝试在电路板更新结束时或游戏更新开始时添加usleep(500000)。最终发生的事情是在电路板更新中添加的精灵,对于人类玩家来说,直到计算机玩家提交他的移动之后才会出现。所以游戏等待500毫秒,然后用两个动作进行更新。
有没有办法强制CCLayer在usleep之前更新其子精灵,或者是否有更好的方法来添加这个思考时间?
由于
答案 0 :(得分:1)
如果您计划在控制器中接收更新,则可能会更新更新:(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个绘制周期。