Я создаю игру, используя cocos2d.
Я перемещаю спрайты, применяя действие CCRepeatForever в методе ccTouchBegan , и когда спрайт сталкивается с другим спрайтом, анимация столкновенияat in ccTouchMoved . У меня проблемы с остановкой анимации после окончания коллизии - я остановил ее с помощью stopAction , но она не работает.
Это код, который я использую:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
[selSprite resumeSchedulerAndActions];
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
[self selectSpriteForTouch:touchLocation];
return TRUE;
}
- (void)selectSpriteForTouch:(CGPoint)touchLocation
{
else if(selSprite==FuelTruck)
{
NSMutableArray *FuelTruckWalkAnimFrames = [NSMutableArray array];
for(int i = FuelTruckTouchStartFrameIndex; i <= FuelTruckTouchEndFrameIndex; ++i) {
[FuelTruckWalkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"ftruck_move_%d.png", i]]];
}
FuelTruckWalkAnim = [CCAnimation animationWithFrames:FuelTruckWalkAnimFrames delay:FuelTruckTouchFrameDelay];
walkFuelTruck = [CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:FuelTruckWalkAnim restoreOriginalFrame:YES]];
[selSprite runAction:walkFuelTruck];
}
}
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
else if(CGRectIntersectsRect(selSprite.boundingBox,BluePlaneFuelHatch.boundingBox))
{
NSMutableArray *FuelTruckAnimFrames = [NSMutableArray array];
for(int i = FuelTruckCollisionStartFrameIndex; i <= FuelTruckCollisionEndFrameIndex; ++i)
{
[FuelTruckAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"ftruck_col_%d.png", i]]];
}
CCAnimation *FuelTruckAnim = [CCAnimation animationWithFrames:FuelTruckAnimFrames delay:FuelTruckCollisionFrameDelay];
CCAction *FuelTruckCollisionBlue = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:FuelTruckAnim restoreOriginalFrame:NO]];
[FuelTruck runAction:FuelTruckCollisionBlue];
isCollided=YES;
}
else
{
if(isCollided==YES)
{
isCollided=No;
[FuelTruck stopAction:FuelTruckCollisionBlue];
}
}
}
Но это не останавливает анимацию столкновения, когда столкновение закончено.Для завершения анимации требуется несколько миллисекунд, почему это так?