我能够做到,我使用了两种不同的方法:-
1> 通过推迟移除后续帧中的后续子项。
2> 或者不依赖于帧,我使用了增量时间(自上一帧绘制以来的时间)。所以仅在 0.5 秒后删除一个孩子。
使用上述任何一种方式,我都可以省略使用可以占用我的主线程的睡眠。
以下是详细信息,考虑到我总共要删除三个孩子:-
1> 通过推迟移除后续帧中的后续子项。
在当前帧中,我将删除第一个孩子,然后设置一个标志,通知在更新中不要做任何事情,只等待 15 帧,在等待 15 帧时,我还可以执行其他任务,这对游戏玩法没有影响
虽然有了这个我可以灵活地等待任意数量的帧,但是我必须调节不同设备的帧速率,因为在慢速设备中,等待 15 帧可能比快速设备花费更多时间,我不知道如果 cocos2dx 确实自己调节帧速率,那么我很快就跳到了下一个解决方案。
2> 或者不依赖于帧,我使用了增量时间(自上一帧绘制以来的时间)。所以仅在 0.5 秒后删除一个孩子。
在这里,我没有等待 15 帧,而是在 Update(float dt) 中使用了以下条件:-
if(gameState==WaitForNextChildRemoval)
{
deltaTime=deltaTime+dt;
if(deltaTime>=0.5)
{
releaseNextChild();
deltaTime=0;
}
}
这里无论设备(慢或快),下一个孩子将在 0.5 秒后被移除。我认为应该进行的一项改进是当 deltaTime 变得超过 1 sec 时,而不是只移除下一个孩子,它应该一次性移除两个孩子(每个 0.5 秒),因为玩家期望移除一个孩子在 0.5 秒后,因此 deltaTime 为 1 秒(大约),我应该平衡这个期望。
请分享你的想法。