2011-08-22 4 views
1

저는 Box2D 물리학을 가진 Cocos2D 게임을 가지고 있습니다.Cocos2D가 CCAction 진행 중

-(void) zoomToScale:(float)zoom withDuration:(ccTime)duration 
{ 
    id action = [CCScaleTo actionWithDuration:duration scale:zoom]; 
    [scrollNode runAction:action]; 

    currentZoomLevel = zoom; 
} 

이 (장면의 업데이트에 사용되는() 메소드) currentZoomLevel가 나는 데 문제가 있음을 내 GameScene.mm, 나는 주어진 규모를 확대하는 방법에 일하고 있어요 줌에 즉시 설정되고 애니메이션마다 점차적으로 조정되지 않습니다. 애니메이션이 진행되는 동안 currentZoomLevel 변수가 완전히 잘못되었습니다.

저는 현재 ZoomLevel 변수가 애니메이션 진행 상황과 일치하도록하는 방법을 찾아 내기 위해 노력하고 있습니다. CCAction API Reference에 따르면, CCAction의 업데이트 메소드는 애니메이션의 진행을 기준으로 0과 1 사이의 ccTime을 사용합니다 (0은 방금 시작되었으며 1은 방금 완료되었습니다).

조치 외부에서이 ccTime에 액세스하려면 어떻게해야합니까? 이 같은 내 장면의 업데이트 방법에 뭔가 갖고 싶어 : 나는 여기에 분명 뭔가 빠진

if(animating) 
{ 
    float progress = [action getProgress]; // How do I do this? 

    // Do math to update currentZoomLevel based on progress 
} 

오전, 아니면 CCScaleTo를 서브 클래스해야 할 것입니까?

답변

1

애니메이션이 적용되면서 스케일에 직접 액세스 할 수 있어야합니다. "some_node는"당신이/스케일링 애니메이션을하고있는 것입니다 대신 float progress = [action getProgress];

float current_scale = some_node.scale ;

을 시도합니다.

0

실제로 가장 좋은 방법은이 모든 것을 훌륭하게 처리하는 새로운 Cocos2D 확장판 "CCLayerPanZoom"을 사용하는 것입니다. 새로운 cocos2D 설치 (v.1.0 이상)의 일부 여야합니다.

관련 문제