在我的程序中,当你在iOS SIM卡上点击屏幕时,就会使用CCMoveTo发牌。动画需要.4秒才能完成。再次轻拍屏幕,下一副牌就发完了。第二个动画也需要.4秒。我所要做的就是禁止我的程序在第一个动画完成之前分发第二套牌。尝试了sleep(),显然不能达到预期的效果。我也尝试了几种不同的方式使用Cocos2d的CCDelayTime,但是没有得到想要的结果。做这件事最简单和/或最节省内存的方法是什么?
编辑:@crackity_jones -这是我的HelloWorldLayer文件和我为CCSprite创建的允许移动的类别:
HelloWorldLayer.h
#import <GameKit/GameKit.h>
#import "CCSprite+MoveActions.h"
#import "cocos2d.h"
// globals
CCSprite *card1;
...
CCSprite *card9;
@interface HelloWorldLayer : CCLayer {
NSMutableArray *deck;
...
int touchCount;
}
...
@endHelloWorldLayer.m
...
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
touchCount++;
[self nextRound];
}
// one method to handle all rounds dealt
-(void)nextRound {
if (touchCount == 1) {
[self removeAllCards];
[deck shuffle];
[self dealFirstRound];
} else if (touchCount == 2) {
[self dealSecondRound];
} else if (touchCount == 3) {
[self dealThirdRound];
} else if (touchCount == 4) {
[self dealFourthRound];
touchCount = 0;
}
}
-(NSMutableArray *)makeDeck {
// create mutable array of 52 card sprites
}
-(void)dealFirstRound {
...
// declare, define, add card objects to layer at start-point here
…
// the "moveToPositionX" methods contain the animation code
[firstCard moveToPosition1];
[secondCard …2];
[third...3];
[fourth...4];
}
// Also methods for removing all rounds of cards
…
@endCCSprite (MoveActions)
#import "CCSprite+MoveActions.h"
#define kCardTravelTime .1
@implementation CCSprite (MoveActions)
-(void)moveToPosition1 {
CGSize size = [[CCDirector sharedDirector] winSize];
[self runAction:[CCMoveTo actionWithDuration:kCardTravelTime
position:CGPointMake(size.width/2 - card1.contentSize.width/4, card1.contentSize.height/2 + holeCard1.contentSize.height/5)]];
CCDelayTime *waitTime = [CCDelayTime actionWithDuration:.4];
[self runAction:waitTime];
}
-(void)moveToPosition2 {
CGSize size = [[CCDirector sharedDirector] winSize];
CCDelayTime *delay = [CCDelayTime actionWithDuration:.2];
CCMoveTo *move = [CCMoveTo actionWithDuration:kCardTravelTime
position:CGPointMake(size.width/2 + card1.contentSize.width/4, card1.contentSize.height/2 + holeCard1.contentSize.height/5)];
[self runAction:[CCSequence actions:delay, move, nil]];
}
// rest of the methods 3-9 look like the above, essentially
@end发布于 2012-07-02 22:54:36
你可以试试这个!如果需要,可以使用在CCSequence操作中插入一些CCDelaytime操作。
-(void)dealFirstRound {
id card1Move = [CCCallBlock actionWithBlock:^{
[firstCard moveToPosition1];
}];
id card2Move = [CCCallBlock actionWithBlock:^{
[secondCard moveToPosition2];
}];
id card3Move = [CCCallBlock actionWithBlock:^{
[thirdCard moveToPosition3];
}];
id card4Move = [CCCallBlock actionWithBlock:^{
[fourthCard moveToPosition4];
}];
[self runAction:[CCSequence actions:
card1Move,
card2Move,
card3Move,
card4Move,
nil];
}发布于 2012-06-27 07:53:24
像这样做一个CCSequence:
[<<CCNode>> runAction:[[CCSequence actions:[deal hand],[CCDelayTime actionWithDuration:.4],[deal 2nd hand].. ,nil]];这将执行第一个操作,delay for .4 s,执行第二个action..and,以便on..you可以添加您想要的操作数量
https://stackoverflow.com/questions/11217484
复制相似问题