1

我的屏幕上有 6 个菜单项,我想在单击帮助按钮(6 个项目之一)后将它们一个一个滑出屏幕。这是我的代码:

NSArray * menuArray = [NSArray arrayWithObjects:item1, item2, item3, item4, item6, item5, nil];
CCDelayTime * delayM = [CCDelayTime actionWithDuration:1.4];
for (CCMenuItem * item in menuArray) {
    id moveLeft = [CCMoveBy actionWithDuration:0.7 position:ccp(10, 0)];
    id moveRight = [CCMoveBy actionWithDuration:0.4 position:ccp(-200, 0)];
    //CCDelayTime * delayM = [[CCDelayTime alloc] initWithDuration:1.4];
    [item runAction:[CCSequence actions:moveLeft, moveRight, delayM, nil]];
}

出于某种原因,这里的延迟似乎没有任何区别,并且所有菜单项同时滑出屏幕。我怎样才能使菜单项在最后一个已经有之前不会滑出屏幕?

旁注:我不知道如何取消这些菜单项所连接的所有选择器,以便用户在整个动画进行时不会意外触摸选择器。有人可以帮我解决这个问题吗?

4

1 回答 1

1

这是因为它们都同时开始这些动作。

您可以这样做:

NSArray * menuArray = [NSArray arrayWithObjects:item1, item2, item3, item4, item6, item5, nil];
float delay = 0;
for (CCMenuItem * item in menuArray) {
    CCDelayTime * delayM = [CCDelayTime actionWithDuration:delay];
    id moveLeft = [CCMoveBy actionWithDuration:0.7 position:ccp(10, 0)];
    id moveRight = [CCMoveBy actionWithDuration:0.4 position:ccp(-200, 0)];
    [item runAction:[CCSequence actions:delayM,moveLeft, moveRight,  nil]];
    delay += 1.1;
}

请记住,runAction 是异步的 - 所以要让它们一个一个地执行,您必须从不延迟开始,并且对于每个项目,将前一个项目的操作所需的时间长度添加到延迟中。在这种情况下,每个项目的动作需要 1.1 秒(左移 0.7,右移 0.4),所以我们将每个项目的延迟移动前延长 1.1 秒。

于 2012-05-27T05:57:34.573 回答