2009-07-08 1 views
0

주인공이 점수를 얻으려고 화면에서 뛰어 내리는 게임을 디자인했지만 캐릭터가 착륙 한 후에 만 ​​플레이어가 터치 할 수 있도록해야합니다. 놓친 ??동작 문제

(BOOL)이 ccTouchesEnded (NSSet *)는 withEvent 접촉 (의 UIEvent *) 이벤트 {

UITouch *touch = [touches anyObject]; 

    CGPoint point = [touch locationInView: [touch view]]; 

    point = [[Director sharedDirector] convertCoordinate: point]; 

    id jump = [JumpTo actionWithDuration:0.5 position:ccp(point.x,point.y) height:100 jumps:1]; 
    [plainSprite runAction:jump]; 

    if (![jump isDone]) 
    { 
     isTouchEnabled=NO; 
    } 

창 YES;

}

+0

내 대답과 관련없는 한 의견 - 더 나은 질문 제목과 함께 더 나은 답변을 얻을 수 있습니다. "애니메이션 중에 사용자 입력 비활성화" –

답변

1

문제는 JUMPTO는 "비동기"(물론, 정말하지만 비동기 호출의 모양을주는 것) 일 것입니다. 작동 방법은 다음과 같습니다.

IntervalAction (예 : JumpTo)을 만들면 위치, 불투명도 등의 일부 속성을 추적하는 객체가 만들어집니다. 그러면 게임 루프가 계속 이동하여 해당 속성을 정기적으로 호출하여 속성을 업데이트합니다.

if (! [jump isDone])는 작업이 완료된 후에 작업이 생성 된 직후에 호출되므로 작동하지 않습니다.

그래서, 문제 해결하는 방법 -

첫째는 jumpIsDone 방법을 만들고, 스프라이트를 다시 할 수 있습니다. 그 다음 :

isTouchEnabled = NO; 
[plainSprite runAction: [JumpTo actionWithDuration: 0.5 position:ccp(point.x, point.y) height:100 jumps:1]]; 
     [plainSprite runAction: [Sequence actionOne: [DelayTime actionWithDuration: 0.5] 
             two: [CallFunc actionWithTarget: self selector: @selector(jumpIsDone)]]];