2012-12-20 1 views
0

내 init 메소드에서 이와 같은 애니메이션 프레임을 초기화합니다.CCAnimation이 작동하지 않습니다.

walkingFrames = [NSMutableArray array]; 
    for(int i =2; i<34; i = i+2){ 
     if(i<10){ 
      [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-00%d.tif", i]]]; 
     } 
     else{ 
      [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-0%d.tif", i]]]; 
     } 
    } 


where walkingFrames is defined in the header file. 

내 업데이트 방법에서 이와 같은 애니메이션을 만들려고하면 bad_access가 발생합니다.

CCAnimation *walkingAnimation = [CCAnimation animationWithSpriteFrames:walkingFrames delay:animationWalkingSpeed]; 
        self.walkAction = [CCRepeatForever actionWithAction: 
             [CCAnimate actionWithAnimation:walkingAnimation]]; 
        [_guy runAction:_walkAction]; 

where walkAction is a CCAction property. 

나는 무슨 일이 벌어지고 있는지 해결하는데 어려움을 겪고 있습니다. 이 코드

답변

0

크래시로 이어지는 두 가지 문제점을 발견 한 후 애니메이션이 실행되지 않습니다. 내가 그것을 사용 이후 첫째로 내 업데이트 방법에서,이 같은 내 NSMutableArray를 초기화 있었어야 :

대신 어떻게 이렇게하기 전에 그 일을 하였다
walkingFrames = [[NSMutableArray alloc] init]; 

:

walkingFrames = [NSMutableArray array]; 

그럼 내가 찾은 내 애니메이션이 실행되지 않았지만 충돌도 발생하지 않았습니다.

내 CCSpriteFrameCache에 문제가있었습니다.

나는이처럼 설정되었습니다

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"images.plist"]; 

그리고 나는 그것이 내가 필요를 중지 할 때 내 애니메이션의 원래 프레임을 복원 :

CCSpriteFrameCache *frames = [[CCSpriteFrameCache sharedSpriteFrameCacher] addSpriteFramesWithFile:@"images.plist"]; 

나는이 일을 했어야 이렇게하려면 :

[_guy stopAction:_walkAction]; 
    [_guy setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Frame-008.tif"]]; 
0

시도 .. 모든

[_guy runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation: walkingAnimation restoreOriginalFrame:NO]]]; 
+0

@bluestunt justAnimation.restoreOriginalFrame = NO; 그리고 여기에 스프라이트 변수와 함께이 코드를 사용하십시오. _guy가 스프라이트 변수입니다. :) –

+0

@bluestunt이 친구를 시험해 보셨습니까 ?? –

+0

네, 그랬습니다, _guy는 스프라이트 변수입니다. runAction 브래킷에 애니메이션을 만드는 작업과이 작업을 모두 시도했습니다. 당신이 제안한 방식이 똑같은 문제로 추락했습니다. 퍼가기는 충돌을 일으키지 않았지만 애니메이션을 시작하지도 못했습니다. – bluestunt

0

먼저,이에 대한 필요가 없습니다 :

[walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-%03i.tif", i]]]; 

대신

if(i<10){ 
      [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-00%d.tif", i]]]; 
     } 
     else{ 
      [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-0%d.tif", i]]]; 
     } 

, 당신은 돌출이 쓸 수 이렇게 말하면 더 구체적으로 오류를 제기 할 수 있습니까? 오류 메시지 란 정확히 무엇이며 어떤 행에 있습니까? 이 라인을 얻는 경우 :

CCAnimation *walkingAnimation = [CCAnimation animationWithSpriteFrames:walkingFrames delay:animationWalkingSpeed]; 

을 당신이 먼저 CCSpriteFrameCache에 프레임을 인쇄하려면 해당 프레임이 존재 여부를 표시하는지 확인해야 좋습니다.

+0

할당하지 않았거나 NSMutable 배열을 올바르게 초기화하지 못했습니다. 왜 충돌이 발생했는지 생각합니다. 이제 문제는 애니메이션이 시작되지 않는다는 것입니다. – bluestunt