2011-10-07 6 views
0

테트리스 클론을위한 일부 Cocos2D 애니메이션을 구현하는 데 막혔습니다. (완벽하게 작동하고, 논리 오류가없고, 행을 삭제할 때 약간의 부드러운 애니메이션을 수행하려고합니다.) 이것은 고전 테트리스 프로그래밍 용 for 루프에서 발생CCMoveBy 동작

block.position = ccp(block.position.x, block.position.y - kBlockSize); 

:

현재 코드는 (어떤 애니메이션) 막과 같이 블록 위치를 삭제하지 않는다. 나는 다음과 같이 애니메이션을 시도 할 때 :

id move = [CCMoveBy actionWithDuration:0.5f position:(0, -kBlockSize)]; 
[block runAction:move]; 

일부 블록은도 힘든 작업이 동일한 블록을 여러 번 호출 할 수 있습니다, 일단 아래로 이동 (예를 들어 하나 개 이상의 행을 깨는 경우) ...

왜 그런가? 나는 그것이 약간 혼란 스럽다는 것을 알고 있지만, 요점은 내가 똑같은 일을하고 있고 다른 결과를 얻고 있다는 것입니다 ... 나는 명확히하는 데 더 많은 코드를 게시 할 수 있습니다!

감사합니다.

+0

당신은 id move = [CCMoveBy actionWithDuration : 0.5f position : (0, -kBlockSize)]를 입력 해 보았습니까? [block runAction : move]; 업데이트 메소드에서 항상 호출되고 있습니까? – Jonathan

+0

CCMoveBy보다는 CCMoveTo를 사용하려고합니다. 이동이 완료되기 전에 여러 번 호출되는 경우 최종 MoveTo가 올바른 최종 위치로 이동합니다. – mbehan

답변

0

이전 작업이 완료되기 전에 CCMoveBy 작업을 호출 할 수 있도록 작업이 병렬 작업임을 확신합니다. 내가 사용하고 어떤 대안이 ...있는 조치가 플래그를 설정하는 CCCallFunc 액션으로 마무리 CCSequence를 사용하여 완료되면 대한

  1. 모니터. 무엇인가 ...

    아이디 시켜라 = [CCSequence의 runWithActions [CCMoveBy actionWithDuration : 0.5F 위치 (0, -kBlockSize)], [CCCallFunc actionWithTarget : 자기 선택기 : @ 선택기 (MYFUNC), 닐]

  2. 롤 마지막 업데이트하는 것이 어떤 도움이

희망 때문에 델타 시간/틱 #의 보류를 얻을 수 틱 또는 업데이트 기능에 속도 변수를 사용하여 자신의 솔루션을 제공합니다.

0

감사합니다. 그 답은 제게 많은 도움이됩니다.

여기에 게시하기 전에 CCSequences를 사용해 보았지만 성공하지 못했습니다. 문제는 다음과 같습니다.

행을 삭제하는 CCSequence 내부에는 첫 번째 블록이 전체 블록 행 (x 초)을 페이드 아웃하고 두 번째 블록이 위의 모든 블록을 삭제합니다 행 (y 초의 기간).

두 개 이상의 행이있는 경우 다음 CCSequence가 이전과 거의 같은 시간에 시작하여 위의 블록의 잘못된 위치를 읽음으로써 잘못된 계단식 배열로 이어지기 때문에 ONE ONE 행을 삭제해야하는 경우 제대로 작동합니다 블록 수

나는 더 이상 CCSequence를 사용하여, 그 마지막 인수로 CCCallFuncND을 소요 해결 :

id fadeOutSequence = [CCSequence actions:fadeout, destroyBlocks, notifyFadeFinish, nil]; 

//inside method specified for notifyFadeFinish: 
id dropAbove = [CCSequence actions: dropBlocks, notifyDropFinish, nil]; 

//inside method specified for notifyDropFinish 
//start a new delete sequence, if there is more rows to delete. 

지금 중력 모드를 구현하는 것, 감사를 다시!