2014-07-01 1 views
0

OOP/ObjC/Cocos2d에 대해 매우 신감이 많으니 나와 함께하시기 바랍니다. [self schedule:@selector(eyelidsBlink:) interval:1.0];CCActionRemove/addChild가 예약 된 메소드에서 일관되게 표시되지 않습니다.

schedule 방법이있다 :

난과 같이 매초 트리거 방법을

-(CCTimer *) schedule:(SEL)selector interval:(CCTime)interval 
{ 
    return [self schedule:selector interval:interval repeat:CCTimerRepeatForever delay:interval]; 
} 

방법은 아래와 같다 :

- (void)eyelidsBlink:(CCTime)dt{ 

    CCActionRemove *actionRemoveEyelidsNormal = [CCActionRemove action]; 
    [_whiteGuy_EyelidsNormal runAction:actionRemoveEyelidsNormal]; 

    _whiteGuy_EyelidsBlink = [CCSprite spriteWithImageNamed:@"EyelidsBlink_iPhone4.png"]; 
    _whiteGuy_EyelidsBlink.position = ccp(self.contentSize.width/2,self.contentSize.height/2); 
    [_whiteGuy_EyelidsBlink setScale:0.5]; 
    [self addChild:_whiteGuy_EyelidsBlink]; 

    CCActionRemove *remove_eyelidsBlink = [CCActionRemove action]; 
    [_whiteGuy_EyelidsBlink runAction:remove_eyelidsBlink]; 
    NSLog(@"Eyelids blinked"); 

    _whiteGuy_EyelidsNormal = [CCSprite spriteWithImageNamed:@"EyelidsNormal_iPhone4.png"]; 
    _whiteGuy_EyelidsNormal.position = ccp(self.contentSize.width/2,self.contentSize.height/2); 
    [_whiteGuy_EyelidsNormal setScale:0.5]; 
    [self addChild:_whiteGuy_EyelidsNormal]; 
} 

I는 볼 수 처음에는 깜박하지만 이후에는 다른 것을 볼 수 없습니다. 내 NSLog은 매초마다 콘솔에 인쇄되므로 eyelidsBlink 메서드가 호출되고 있음을 알고 있습니다.

누구나 내가 왜 처음부터 깜박 거리지 않는지 알아낼 수 있습니까? 더 많은 정보가 필요하거나 문제를 해결하기위한 테스트를 제안 할 수있는 경우 알려주십시오.

답변

1

깜박임 스프라이트가 추가 된 즉시 제거하기 때문에 실제로 깜박이는 시간이 없습니다. 다른 선택기를 한 번 예약해야합니다. 예를 들어 eyeLidsBlinkOff가 0.1 초 후에 실행되고 깜박임 스프 라이트를 숨 깁니다.

참고 :이 코드는 매우 비효율적입니다. 스프라이트를 만드는 것은 비교적 느린 작업입니다. 대신 두 스프라이트를 모두 자식으로 유지하고 하나의 스프라이트의 visible 속성을 NO로 설정하십시오. 깜박이는 동안 각 스프라이트의 가시 플래그를 플립합니다. 이렇게하면 코드가 훨씬 짧아집니다.

+0

A-ha, 브릴리언트. 내가 집에 갈 때 이것을 시도 할 것이다. 고맙습니다. –

+0

제안 사항을 반영하기 위해 코드를 다시 작성했으며 성공적으로 실행되었으며 훨씬 더 원활하게 실행되었습니다. 조언 해 주셔서 감사합니다. –